blob: 91095366f4126a23cf7c1d123890615042e74687 [file] [log] [blame]
package org.eclipse.epf.library.edit.meta;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.epf.library.edit.util.LibraryEditUtil;
import org.eclipse.epf.library.edit.util.MethodElementPropUtil;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.util.ExtendedTable;
public class ReferenceTable {
private MethodElement element;
private ExtendedTable meta;
private Map<MethodElement, Map<MethodElement, MethodElement>> data = new HashMap<MethodElement, Map<MethodElement, MethodElement>>();
private ReferenceTable(MethodElement owner, ExtendedTable meta) {
this.element = owner;
this.meta = meta;
}
public ReferenceTable(MethodElement element, ExtendedTable meta, String guidListString) {
this(element, meta);
if (guidListString == null) {
return;
}
guidListString = guidListString.trim();
String[] guids = guidListString.split(MethodElementPropUtil.infoSeperator);
int sz = guids == null ? 0 : guids.length;
if (sz < 3) {
return;
}
int tupleSz = sz / 3;
for (int i = 0; i < tupleSz; i++) {
int j = i *3;
String row = guids[j + 0];
String col = guids[j + 1];
String cel = guids[j + 2];
MethodElement rowE = LibraryEditUtil.getInstance().getMethodElement(row);
if (rowE == null) {
continue;
}
MethodElement colE = LibraryEditUtil.getInstance().getMethodElement(col);
if (colE == null) {
continue;
}
MethodElement celE = LibraryEditUtil.getInstance().getMethodElement(cel);
if (celE == null) {
continue;
}
add(rowE, colE, celE);
}
}
public ExtendedTable getMeta() {
return meta;
}
public void add(MethodElement row, MethodElement col, MethodElement cel) {
Map<MethodElement, MethodElement> colCelMap = data.get(row);
if (colCelMap == null) {
colCelMap = new HashMap<MethodElement, MethodElement>();
data.put(row, colCelMap);
}
colCelMap.put(col, cel);
}
public void remove(MethodElement row, MethodElement col) {
Map<MethodElement, MethodElement> colCelMap = data.get(row);
if (colCelMap == null) {
return;
}
colCelMap.remove(col);
}
public MethodElement getCellElement(MethodElement row, MethodElement col) {
if (row == null || col == null) {
return null;
}
Map<MethodElement, MethodElement> map = data.get(row);
return map == null ? null : map.get(col);
}
public String getGuidListString() {
LibraryEditUtil util = LibraryEditUtil.getInstance();
String sep = MethodElementPropUtil.infoSeperator;
StringBuffer sb = new StringBuffer();
for (Map.Entry<MethodElement, Map<MethodElement, MethodElement>> entry : data
.entrySet()) {
MethodElement row = entry.getKey();
Map<MethodElement, MethodElement> map = entry.getValue();
if (map != null && !map.isEmpty()
&& row == util.getMethodElement(row.getGuid())) {
for (Map.Entry<MethodElement, MethodElement> ccEntry : map
.entrySet()) {
MethodElement col = ccEntry.getKey();
MethodElement cel = ccEntry.getValue();
if (col != null && cel != null
&& col == util.getMethodElement(col.getGuid())
&& cel == util.getMethodElement(cel.getGuid())) {
if (sb.length() != 0) {
sb.append(sep);
}
sb.append(row.getGuid());
sb.append(sep + col.getGuid());
sb.append(sep + cel.getGuid());
}
}
}
}
return sb.toString();
}
public MethodElement getElement() {
return element;
}
}