blob: 8495145643742d1684ba20c3c1fa953e670bfc9a [file] [log] [blame]
/*
* Copyright (c) 2007 Borland Software Corporation
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Dmitry Stadnik (Borland) - initial API and implementation
*/
package org.eclipse.gmf.internal.sketch.transformer;
import org.eclipse.gmf.codegen.gmfgen.ElementType;
import org.eclipse.gmf.codegen.gmfgen.GenCommonBase;
import org.eclipse.gmf.codegen.gmfgen.GenCompartment;
import org.eclipse.gmf.codegen.gmfgen.GenContainerBase;
import org.eclipse.gmf.codegen.gmfgen.GenDiagram;
import org.eclipse.gmf.codegen.gmfgen.GenLabel;
import org.eclipse.gmf.codegen.gmfgen.GenLink;
import org.eclipse.gmf.codegen.gmfgen.GenNode;
import org.eclipse.gmf.codegen.gmfgen.MetamodelType;
import org.eclipse.gmf.codegen.gmfgen.SpecializationType;
/**
* @author dstadnik
*/
public class NamesHelper {
public void fix(GenDiagram diagram, String name) {
String prefix = toPrefix(name);
fix(diagram.getElementType(), name, prefix);
if (prefix == null) {
return;
}
fixContainerBase(diagram, prefix);
}
public void fix(GenNode node, String name) {
String prefix = toPrefix(name);
fix(node.getElementType(), name, prefix);
if (prefix == null) {
return;
}
fixContainerBase(node, prefix);
node.setGraphicalNodeEditPolicyClassName(prefix + GenNode.GRAPHICAL_NODE_EDIT_POLICY_SUFFIX);
node.setCreateCommandClassName(prefix + GenNode.CREATE_COMMAND_SUFFIX);
}
public void fix(GenCompartment compartment, String name) {
String prefix = toPrefix(name);
if (prefix == null) {
return;
}
fixContainerBase(compartment, prefix);
}
public void fix(GenLink link, String name) {
String prefix = toPrefix(name);
fix(link.getElementType(), name, prefix);
if (prefix == null) {
return;
}
fixBase(link, prefix);
link.setCreateCommandClassName(prefix + GenLink.CREATE_COMMAND_SUFFIX);
link.setReorientCommandClassName(prefix + GenLink.REORIENT_COMMAND_SUFFIX);
}
public void fix(GenLabel label, String name) {
String prefix = toPrefix(name);
if (prefix == null) {
return;
}
fixBase(label, prefix);
}
protected void fixContainerBase(GenContainerBase element, String prefix) {
fixBase(element, prefix);
element.setCanonicalEditPolicyClassName(prefix + GenContainerBase.CANONICAL_EDIT_POLICY_SUFFIX);
}
protected void fixBase(GenCommonBase element, String prefix) {
element.setEditPartClassName(prefix + GenCommonBase.EDIT_PART_SUFFIX);
element.setItemSemanticEditPolicyClassName(prefix + GenCommonBase.ITEM_SEMANTIC_EDIT_POLICY_SUFFIX);
element.setNotationViewFactoryClassName(prefix + GenCommonBase.NOTATION_VIEW_FACTORY_SUFFIX);
}
protected void fix(ElementType type, String name, String prefix) {
if (type != null && name != null) {
type.setDisplayName(name);
}
if (prefix == null) {
return;
}
if (type instanceof MetamodelType) {
MetamodelType mtype = (MetamodelType) type;
mtype.setEditHelperClassName(prefix + MetamodelType.EDIT_HELPER_SUFFIX);
} else if (type instanceof SpecializationType) {
SpecializationType stype = (SpecializationType) type;
stype.setEditHelperAdviceClassName(prefix + SpecializationType.EDIT_HELPER_ADVICE_SUFFIX);
}
}
protected String toPrefix(String name) {
if (name == null) {
return null;
}
StringBuilder sb = new StringBuilder(name.length());
boolean firstChar = true;
for (char c : name.toCharArray()) {
if (firstChar) {
if (Character.isJavaIdentifierStart(c)) {
sb.append(c);
firstChar = false;
}
} else {
if (Character.isJavaIdentifierPart(c)) {
sb.append(c);
}
}
}
return sb.length() == 0 ? null : sb.toString();
}
}