blob: 9f9f4581a68fa340d3db8d721dfb2a2c70a9a935 [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.bridge.naming;
import java.util.Collection;
import org.eclipse.emf.codegen.ecore.genmodel.GenClass;
import org.eclipse.emf.codegen.ecore.genmodel.GenFeature;
import org.eclipse.gmf.codegen.gmfgen.FeatureLabelModelFacet;
import org.eclipse.gmf.codegen.gmfgen.FeatureLinkModelFacet;
import org.eclipse.gmf.codegen.gmfgen.GenCompartment;
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.TypeLinkModelFacet;
import org.eclipse.gmf.internal.common.NamesDispenser;
/**
* Generates names based on model facet identifiers.
* Should be consistent with genmodel naming strategy
* and GenCommonBase.getClassNamePrefix() in particular.
*
* @author dstadnik
*/
public class ClassGenNamingStrategy extends AbstractGenNamingStrategy {
/**
* Max length of semantic segment.
* Concatenated feature names is the primary target.
*/
private static final int MAX_SEGMENT_LENGTH = 23;
public ClassGenNamingStrategy(String suffix, NamesDispenser namesDispenser, GenNamingStrategy chainedNamingStrategy, GenNamingStrategy prefixNamingStrategy) {
super(suffix, namesDispenser, chainedNamingStrategy, prefixNamingStrategy);
}
public String get(GenDiagram element) {
if (element.getDomainDiagramElement() != null) {
String name = element.getDomainDiagramElement().getName();
if (!isEmpty(name)) {
return createClassName(name);
}
}
return super.get(element);
}
public String get(GenNode element) {
if (element.getModelFacet() != null && element.getModelFacet().getMetaClass() != null) {
String name = element.getModelFacet().getMetaClass().getName();
if (!isEmpty(name)) {
return createClassName(name);
}
}
return super.get(element);
}
public String get(GenCompartment element) {
String name = element.getTitle();
if (!isEmpty(name)) {
name = Character.toUpperCase(name.charAt(0)) + name.substring(1);
name = getCompartmentHostPrefix(element) + name;
return createClassName(name);
}
return super.get(element);
}
public String get(GenLink element) {
if (element.getModelFacet() instanceof TypeLinkModelFacet) {
GenClass type = ((TypeLinkModelFacet) element.getModelFacet()).getMetaClass();
if (type != null) {
String name = type.getName();
if (!isEmpty(name)) {
return createClassName(name);
}
}
}
if (element.getModelFacet() instanceof FeatureLinkModelFacet) {
GenFeature feature = ((FeatureLinkModelFacet) element.getModelFacet()).getMetaFeature();
if (feature != null) {
String name = feature.getName();
if (!isEmpty(name)) {
name = name.length() > 1 ? Character.toUpperCase(name.charAt(0)) + name.substring(1) : name.toUpperCase();
name = feature.getGenClass().getName() + name;
return createClassName(name);
}
}
}
return super.get(element);
}
public String get(GenLabel element) {
if (element.getModelFacet() instanceof FeatureLabelModelFacet) {
StringBuffer sb = new StringBuffer();
for (GenFeature feature : (Collection<? extends GenFeature>) ((FeatureLabelModelFacet) element.getModelFacet()).getMetaFeatures()) {
String name = feature.getName();
if (!isEmpty(name)) {
name = name.length() > 1 ? Character.toUpperCase(name.charAt(0)) + name.substring(1) : name.toUpperCase();
sb.append(name);
}
}
if (sb.length() > 0) {
String name = sb.toString();
if (name.length() > MAX_SEGMENT_LENGTH) {
name = name.substring(0, MAX_SEGMENT_LENGTH);
}
return createClassName(getLabelHostPrefix(element) + name);
}
}
return super.get(element);
}
}