Package com.google.gwt.editor.rebind.model

Source Code of com.google.gwt.editor.rebind.model.EditorAccess

/*
* Copyright 2010 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.rebind.model;

import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.JField;
import com.google.gwt.core.ext.typeinfo.JMethod;
import com.google.gwt.core.ext.typeinfo.JType;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.editor.client.Editor.Path;
import com.google.gwt.editor.client.IsEditor;

/**
* Encapsulates the various ways an Editor might be accessed.
*/
class EditorAccess {
  private static final String EDITOR_SUFFIX = "Editor";

  public static EditorAccess root(JClassType rootType) {
    return new EditorAccess("", rootType, "");
  }

  /**
   * Constructs an EditorAccess for an IsEditor type.
   */
  public static EditorAccess via(EditorAccess access, JClassType type) {
    return new EditorAccess(access.getPath(), type, access.getExpresson()
        + ".asEditor()");
  }

  public static EditorAccess via(JField field) {
    String path = field.getName();
    Path pathAnnotation = field.getAnnotation(Editor.Path.class);
    if (pathAnnotation != null) {
      path = pathAnnotation.value();
    } else if (path.endsWith(EDITOR_SUFFIX)) {
      path = path.substring(0, path.length() - EDITOR_SUFFIX.length());
    }

    return new EditorAccess(path, field.getType().isClassOrInterface(),
        field.getName());
  }

  public static EditorAccess via(JMethod method) {
    String path = method.getName();
    Path pathAnnotation = method.getAnnotation(Editor.Path.class);
    if (pathAnnotation != null) {
      path = pathAnnotation.value();
    } else if (path.endsWith(EDITOR_SUFFIX)) {
      path = path.substring(0, path.length() - EDITOR_SUFFIX.length());
    }

    return new EditorAccess(path, method.getReturnType().isClassOrInterface(),
        method.getName() + "()");
  }

  private static boolean isEditor(JType type) {
    JClassType classType = type.isClassOrInterface();
    if (classType == null) {
      return false;
    }
    TypeOracle oracle = classType.getOracle();
    return oracle.findType(IsEditor.class.getName()).isAssignableFrom(classType);
  }

  private final boolean isEditor;
  private final String expression;
  private final String path;
  private final JClassType type;

  private EditorAccess(String path, JClassType type, String expression) {
    this.expression = expression;
    this.path = path;
    this.type = type;
    isEditor = isEditor(type);
  }

  public JClassType getEditorType() {
    return type;
  }

  public String getExpresson() {
    return expression;
  }

  public String getPath() {
    return path;
  }

  /**
   * Returns {@code true} if the editor accessed by this EditorAccess implements
   * the IsEditor interface.
   */
  public boolean isEditor() {
    return isEditor;
  }

  /**
   * For debugging use only.
   */
  @Override
  public String toString() {
    return path + " = " + type.getParameterizedQualifiedSourceName();
  }
}
TOP

Related Classes of com.google.gwt.editor.rebind.model.EditorAccess

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.