/**
* This file is part of Archiv-Editor.
*
* The software Archiv-Editor serves as a client user interface for working with
* the Person Data Repository. See: pdr.bbaw.de
*
* The software Archiv-Editor was developed at the Berlin-Brandenburg Academy
* of Sciences and Humanities, Jägerstr. 22/23, D-10117 Berlin.
* www.bbaw.de
*
* Copyright (C) 2010-2013 Berlin-Brandenburg Academy
* of Sciences and Humanities
*
* The software Archiv-Editor was developed by @author: Christoph Plutte.
*
* Archiv-Editor is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Archiv-Editor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Archiv-Editor.
* If not, see <http://www.gnu.org/licenses/lgpl-3.0.html>.
*/
package org.bbaw.pdr.ae.export.internal;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Vector;
import org.bbaw.pdr.ae.export.pluggable.AeExportCoreProvider;
import org.bbaw.pdr.ae.metamodel.PdrId;
import org.bbaw.pdr.ae.model.Aspect;
import org.bbaw.pdr.ae.model.PdrObject;
import org.bbaw.pdr.ae.model.view.OrderingHead;
import org.bbaw.pdr.ae.view.control.PDRObjectsProvider;
@Deprecated
public class PdrObjectSelectionStructure {
private PDRObjectsProvider provider;
private PdrObject[] pdrObjects;
public PdrObjectSelectionStructure() {
System.out.println(" setting up virtual structure for pdr object selection");
this.provider = AeExportCoreProvider.getInstance().getPdrObjectsProvider();
this.pdrObjects = AeExportCoreProvider.getInstance().getPdrObjects();
this.setInput(pdrObjects);
/* System.out.println(" pdr objects provider ready:");
System.out.println(" "+(this.provider != null));*/
}
public void setInput(PdrObject[] pdrObjects) {
// System.out.println(" updating pdr objects virtual structure:");
this.pdrObjects = pdrObjects;
// System.out.println(" passing pdr objects as input to our pdr objects provider");
this.provider.setInput(pdrObjects);
/* System.out.println(" # of pdr objects: "+this.pdrObjects.length);
System.out.println(" can we retrieve any arranged aspect objects from our pdr"+
" objects provider?");*/
/* System.out.println(" "+(this.provider.getArrangedAspects() != null));
try {
System.out.println(" # of arrangements of aspects known to object provider: "+
this.provider.getArrangedAspects().size());
} catch (Exception e) {
System.out.println(" retrieving aspect objects from pdr objects"+
" provider failed!");
System.out.println(" "+e);
}*/
}
public PdrObject[] getObjects() {
return this.pdrObjects;
}
public PdrObject[] getChildren(PdrObject parent) {
// System.out.println("parent is of class: "+parent.getClass().getCanonicalName());
// System.out.println(" identify child nodes of pdr object: "
// +parent.getDisplayNameWithID());
PdrId pdrId = parent.getPdrId();
if (pdrId != null)
if (pdrId.isValid()) {
// System.out.println(" pdr id is valid: "+pdrId.getId());
String pdrType = pdrId.getType();
if (pdrType.equals("pdrPo")) {
// System.out.println(" object is of type pdr person.");
return getPersonsAspects(parent);
}
}
return null;
}
public PdrObject[] getPersonsAspects(PdrObject person) {
// System.out.println(" identify aspects of person: "+person.getDisplayNameWithID());
Vector<PdrObject> results = new Vector<PdrObject>();
HashSet<PdrId> aspectIds = person.getAspectIds();
/* System.out.println(" aspects likely to have the ids: "+
aspectIds.toArray(new PdrId[aspectIds.size()]));*/
Vector<OrderingHead> arrangedAspects = this.provider.getArrangedAspects();
if (arrangedAspects != null) {
// System.out.println(" aspects known to be arranged in sets: "+arrangedAspects.size());
for (OrderingHead arrangement : arrangedAspects) {
Vector<Aspect> aspects = arrangement.getAspects();
/* System.out.println(" processing set with as many aspects as: "+
aspects.size());*/
for (Aspect aspect : aspects) {
if (aspectIds.contains(aspect.getPdrId())) {
// System.out.println(" id of this aspect is one we are looking for: "
// +aspect.getPdrId().getId());
results.add((PdrObject)aspect);
}
}
}
} //else
// System.out.println(" No Aspect groups available for person: "+
// person.getDisplayNameWithID());
// System.out.println(" return aspects: "+results.size());
return results.toArray(new PdrObject[results.size()]);
}
/**
* Tries to identify the parent of this element according to the
* deliberite PDR object hierarchy used in this model
* @param element hopefully a {@link PdrObject}
* @return the Person object the element describes when it is an Aspect,
* otherwise the element itself
*/
public PdrObject getParent(Object element) {
PdrObject pdrObj = (PdrObject)element;
if (pdrObj instanceof Aspect) {
for (PdrObject person : pdrObjects)
if (Arrays.asList(getPersonsAspects(person)).contains(pdrObj))
return person;
}
return pdrObj;
}
}