package org.simantics.interop.mapping.data; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.simantics.db.Resource; public class ResourceSetIdentifiable implements Identifiable { private Resource primary; private Set resources; public ResourceSetIdentifiable(Resource resource) { this.resources = new HashSet(); this.resources.add(resource); this.primary = resource; } public ResourceSetIdentifiable(Resource primary, Resource... resource) { this.resources = new HashSet(); for (Resource r : resource) this.resources.add(r); this.resources.add(primary); this.primary = primary; } public ResourceSetIdentifiable(Resource primary, Collection resource) { this.resources = new HashSet(); for (Resource r : resource) this.resources.add(r); this.resources.add(primary); this.primary = primary; } public ResourceSetIdentifiable(Collection resource) { this.resources = new HashSet(); for (Resource r : resource) this.resources.add(r); this.primary = resource.iterator().next(); } public Resource getPrimary() { return primary; } public Set getResources() { return resources; } @Override public int hashCode() { return resources.hashCode(); } @SuppressWarnings("unchecked") public T getAdapter(Class clazz) { if (clazz.equals(Resource.class)) return (T)primary; if (clazz.equals(Resource[].class)) return (T)resources.toArray(new Resource[resources.size()]); if (clazz.equals(String.class)) { String s = ""; for (Resource r : resources) s += r.toString() + " "; // TODO : have to use org.simantics.db.common.utils.Transaction to get access to ReadGraph. return (T)s;//NameUtils.getSafeName(g,resource); } return null; } @Override public boolean equals(Object arg0) { if (arg0 == null) return false; if (this.getClass() != arg0.getClass()) return false; ResourceSetIdentifiable other = (ResourceSetIdentifiable)arg0; return resources.equals(other.resources); } @Override public Identifiable merge(Identifiable other) { if (other instanceof ResourceIdentifiable) { Collection coll = new ArrayList(); coll.addAll(this.resources); coll.add(((ResourceIdentifiable)other).getResource()); ResourceSetIdentifiable i = new ResourceSetIdentifiable(primary,coll); return i; } else if (other instanceof ResourceSetIdentifiable) { Collection coll = new ArrayList(); coll.addAll(this.resources); coll.addAll(((ResourceSetIdentifiable)other).getResources()); ResourceSetIdentifiable i = new ResourceSetIdentifiable(primary,coll); return i; } return null; } @Override public String toString() { String s = "("; for (Resource r : resources) { s += r.toString() + " "; } s = s.substring(0,s.length()-1) + ")"; return s; } }