blob: ee6154edb0e0a057dacc13009c8b5ca03f45efc8 [file] [log] [blame]
package org.eclipse.epf.uma.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EcoreFactory;
public class QualifiedReferences {
public static final String scopeSeperator = "::"; //$NON-NLS-1$
private Set<EReference> qualifiedReferences;
private ExtendedReference parent;
private boolean qualifiedReferencesLoaded = false;
private Map<String, String> referenceQualifiedNameToIdMap;
private Map<String, String> referenceQualifiedIdToNameMap;
private String qualifiedIdStr;
private String qualifiedNameStr;
public QualifiedReferences(ExtendedReference parent) {
this.parent = parent;
}
public void setQualifiers(String qualifiedIdStr, String qualifiedNameStr) {
this.qualifiedIdStr = qualifiedIdStr;
this.qualifiedNameStr = qualifiedNameStr;
}
public boolean isQualifiedRefernce(EReference ref) {
return getQualifiedReferences().contains(ref);
}
public Set<EReference> getQualifiedReferences() {
if (qualifiedReferences == null) {
qualifiedReferences = new LinkedHashSet<EReference>();
}
String idStrValue = qualifiedIdStr;
String nameStrValue = qualifiedNameStr;
if (idStrValue == null || idStrValue.trim().length() == 0) {
qualifiedReferencesLoaded = false;
if (!qualifiedReferences.isEmpty()) {
qualifiedReferences.clear();
}
} else if (!qualifiedReferencesLoaded) {
if (!qualifiedReferences.isEmpty()) {
qualifiedReferences.clear();
}
List<String> refIds = convertStringsToList(idStrValue);
List<String> refNames = convertStringsToList(nameStrValue);
if (refIds.size() != refNames.size()) {
refNames = refIds;
}
getReferenceQualifiedNameToIdMap().clear();
getReferenceQualifiedIdToNameMap().clear();
for (int i = 0; i < refIds.size(); i++) {
String refId = refIds.get(i);
if (parent != null) {
refId = parent.getId() + scopeSeperator + refId;
}
String refName = refNames.get(i);
getReferenceQualifiedNameToIdMap().put(refName, refId);
getReferenceQualifiedIdToNameMap().put(refId, refName);
EReference ref = EcoreFactory.eINSTANCE.createEReference();
ref.setName(refId);
qualifiedReferences.add(ref);
}
qualifiedReferencesLoaded = true;
}
return qualifiedReferences;
}
private Map<String, String> getReferenceQualifiedNameToIdMap() {
if (referenceQualifiedNameToIdMap == null) {
referenceQualifiedNameToIdMap = new HashMap<String, String>();
}
return referenceQualifiedNameToIdMap;
}
private Map<String, String> getReferenceQualifiedIdToNameMap() {
if (referenceQualifiedIdToNameMap == null) {
referenceQualifiedIdToNameMap = new HashMap<String, String>();
}
return referenceQualifiedIdToNameMap;
}
public String getReferenceQualifierName(String referenceQualifierId) {
getQualifiedReferences();
return getReferenceQualifiedIdToNameMap().get(referenceQualifierId);
}
public String getReferenceQualifierId(String referenceQualifierName) {
getQualifiedReferences();
return getReferenceQualifiedNameToIdMap().get(referenceQualifierName);
}
public String[] getReferenceQualifierNames() {
getQualifiedReferences();
Set<String> nameSet = getReferenceQualifiedNameToIdMap().keySet();
List<String> nameList = new ArrayList<String>(nameSet);
Collections.sort(nameList);
return nameList.toArray(new String[0]);
}
private List<String> convertStringsToList(String string) {
ArrayList<String> strList = new ArrayList<String>();
if (string == null)
string = ""; //$NON-NLS-1$
String strings[] = string
.split("\\,"); //$NON-NLS-1$);
for (int i = 0; i < strings.length; i++) {
if (strings[i].trim().length() > 0)
strList.add(strings[i].trim());
}
return strList;
}
}