All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.gwt.editor.client.impl.Flusher Maven / Gradle / Ivy

There is a newer version: 2.10.0
Show newest version
/*
 * Copyright 2011 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.google.gwt.editor.client.impl;

import com.google.gwt.editor.client.EditorContext;
import com.google.gwt.editor.client.EditorDelegate;
import com.google.gwt.editor.client.EditorVisitor;
import com.google.gwt.editor.client.LeafValueEditor;
import com.google.gwt.editor.client.ValueAwareEditor;

import java.util.Stack;

/**
 * Copies data from the Editor hierarchy into the backing objects.
 */
class Flusher extends EditorVisitor {
  private final Stack> delegateStack = new Stack>();

  @Override
  public  void endVisit(EditorContext ctx) {
    // Flush ValueAware editors
    ValueAwareEditor asValue = ctx.asValueAwareEditor();

    AbstractEditorDelegate delegate;
    if (ctx.getEditorDelegate() == null) {
      delegate = delegateStack.peek();
    } else {
      delegate = delegateStack.pop();
    }
    assert delegate != null;

    if (asValue != null) {
      assert delegate != null : "ValueAwareEditor without delegate";
      if (delegate.shouldFlush()) {
        asValue.flush();
      }
    }

    // Pull value from LeafValueEditors and update edited object
    LeafValueEditor asLeaf = ctx.asLeafValueEditor();
    if (delegate.shouldFlush() && asLeaf != null && ctx.canSetInModel()) {
      ctx.setInModel(asLeaf.getValue());
    }
  }

  @Override
  public  boolean visit(EditorContext ctx) {
    EditorDelegate editorDelegate = ctx.getEditorDelegate();
    if (editorDelegate != null) {
      delegateStack.push((AbstractEditorDelegate) editorDelegate);
    }
    return true;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy