package org.simantics.interop.mapping.data; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.simantics.db.Resource; public class ResourceSetSplitIdentifiable extends ResourceSetIdentifiable { private static int counter = 0; private int identifier; private int index; ResourceSetSplitIdentifiable(Resource resource, int index, int identifier) { super(resource); this.index = index; this.identifier = identifier; } public ResourceSetSplitIdentifiable(int index, int identifier, Resource primary, Resource... resource) { super(primary,resource); this.index = index; this.identifier = identifier; } public ResourceSetSplitIdentifiable(Resource primary, Collection resources,int index, int identifier) { super(primary,resources); this.index = index; this.identifier = identifier; } public static List createIdentifiables(ResourceSetIdentifiable identifiable, int count) { List result = new ArrayList(count); int identifier = counter++; for (int i = 0; i < count; i++) { result.add(new ResourceSetSplitIdentifiable(identifiable.getPrimary(),identifiable.getResources(), i, identifier)); } return result; } public static List createIdentifiables(Identifiable identifiable, int count) { Resource res = identifiable.getAdapter(Resource.class); if (res == null) return null; Resource resources[] = identifiable.getAdapter(Resource[].class); if (resources.length > 1) { List result = new ArrayList(count); int identifier = counter++; for (int i = 0; i < count; i++) { result.add(new ResourceSetSplitIdentifiable(i, identifier, res, resources)); } return result; } else { return ResourceSplitIdentifiable.createIdentifiables(identifiable, count); } } @Override public boolean equals(Object arg0) { if (arg0 == null) return false; if (this.getClass() != arg0.getClass()) return false; ResourceSetSplitIdentifiable other = (ResourceSetSplitIdentifiable)arg0; if (identifier != other.identifier) return false; if (index != other.index) return false; return super.equals(arg0); } @Override public Identifiable merge(Identifiable other) { throw new RuntimeException("Cannot be merged"); } }