package org.panlab.software.fstoolkit.providerAdapters;
import java.util.Vector;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.ui.IViewSite;
import FederationOffice.Office;
import FederationOffice.federationscenarios.RequestedFederationScenario;
import FederationOffice.providersite.Site;
import FederationOffice.resources.OfferedResource;
import FederationOffice.resources.ResourceCategory;
import FederationOffice.services.Taxonomy;
import FederationOffice.uiObjects.OfficeManager;
import FederationOffice.uiObjects.UiObjectsFactory;
import FederationOffice.uiObjects.ui_TaxonomyTreeItem;
import FederationOffice.users.ResourcesProvider;
public class OfficeResourcesContentProvider implements
IStructuredContentProvider, ITreeContentProvider {
private IViewSite viewSite;
private Vector<Office> officeList;
private Boolean showResourcesByTaxonomy;
private Boolean showResourcesByProvider;
/* The content provider class is responsible for
* providing objects to the view. It can wrap
* existing objects in adapters or simply return
* objects as-is. These objects may be sensitive
* to the current input of the view, or ignore
* it and always show the same content
* (like Task List, for example).
*/
public OfficeResourcesContentProvider(IViewSite viewSite,Boolean showResourcesByTaxonomy,
Boolean showResourcesByProvider ) {
super();
this.viewSite = viewSite;
this.showResourcesByTaxonomy = showResourcesByTaxonomy;
this.showResourcesByProvider = showResourcesByProvider;
officeList = new Vector<Office>();
}
private ui_TaxonomyTreeItem invisibleRoot;
@Override
public void dispose() {
// TODO Auto-generated method stub
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub
}
@Override
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof ui_TaxonomyTreeItem) {
if (((ui_TaxonomyTreeItem)parentElement).getChildNodes().size()>0){
return ((ui_TaxonomyTreeItem)parentElement).getChildNodes().toArray() ;
}
}
return new Object[0];
}
@Override
public Object getParent(Object child) {
if (child instanceof ui_TaxonomyTreeItem) {
return ((ui_TaxonomyTreeItem)child).getParentNode();
}
return null;
}
@Override
public boolean hasChildren(Object parentElement) {
if (parentElement instanceof ui_TaxonomyTreeItem)
return ((ui_TaxonomyTreeItem)parentElement).getChildNodes().size()>0 ;
return false;
}
@Override
public Object[] getElements(Object parent) {
if (parent.equals( viewSite )) {
if (invisibleRoot==null) {
invisibleRoot = UiObjectsFactory.eINSTANCE.createui_TaxonomyTreeItem(); //ui_TaxonomyTreeItem( null );
invisibleRoot.setDisplayName("Invisible root");
}
return getChildren(invisibleRoot);
}
return getChildren(parent);
}
public void AddOfficesFromManager(OfficeManager officeMng) {
for (int i = 0; i < officeMng.getOfficesRef().size() ; i++) {
AddOffice(officeMng.getOfficesRef().get(i));
}
}
private void AddOffice(Office office) {
ui_TaxonomyTreeItem rootOffice = UiObjectsFactory.eINSTANCE.createui_TaxonomyTreeItem();
rootOffice.setOfficeElement(office);
officeList.add(office);
if (invisibleRoot==null) {
invisibleRoot = UiObjectsFactory.eINSTANCE.createui_TaxonomyTreeItem();
invisibleRoot.setDisplayName("Invisible node");
}
invisibleRoot.getChildNodes().add(rootOffice);
rootOffice.setParentNode(invisibleRoot);
for (int i = 0; i < office.getContributedTaxonomies().size(); i++) {
ui_TaxonomyTreeItem root = UiObjectsFactory.eINSTANCE.createui_TaxonomyTreeItem();//new TreeParent( office.getContributedTaxonomies().get(i) );
root.setOfficeElement( office.getContributedTaxonomies().get(i) );
rootOffice.getChildNodes().add(root);
root.setParentNode(rootOffice);
AddTaxonomiesOfTaxonomy( root, office.getContributedTaxonomies().get(i) );
}
if (showResourcesByProvider){
for (int i = 0; i < office.getRegisteredUsers().size() ; i++) {
if (office.getRegisteredUsers().get(i) instanceof ResourcesProvider ){
ResourcesProvider rp = (ResourcesProvider) office.getRegisteredUsers().get(i);
ui_TaxonomyTreeItem rProviderItem = UiObjectsFactory.eINSTANCE.createui_TaxonomyTreeItem();//new TreeParent( tax );
rProviderItem.setOfficeElement(rp);
rootOffice.getChildNodes().add(rProviderItem);
rProviderItem.setParentNode(rootOffice);
AddResourcesByProvider( rProviderItem, rp );
}
}
}
DeleteEmptyTaxonomyNodes(rootOffice);
}
private void DeleteEmptyTaxonomyNodes(ui_TaxonomyTreeItem node) {
for (int i = node.getChildNodes().size()-1; i>=0;i--){
if ( node.getChildNodes().get(i).getOfficeElement() instanceof Taxonomy){
DeleteEmptyTaxonomyNodes( node.getChildNodes().get(i) );
}
}
if ( node.getOfficeElement() instanceof Taxonomy){
if (node.getChildNodes().size()==0){
node.getParentNode().getChildNodes().remove(node) ;
node.setParentNode(null);
}
}
}
private void AddTaxonomiesOfTaxonomy(ui_TaxonomyTreeItem node,
Taxonomy taxonomy) {
for (int i = 0; i < taxonomy.getTaxonomies().size() ; i++) {
Taxonomy tax = taxonomy.getTaxonomies().get(i);
ui_TaxonomyTreeItem root = UiObjectsFactory.eINSTANCE.createui_TaxonomyTreeItem();//new TreeParent( tax );
root.setOfficeElement(tax);
node.getChildNodes().add(root);// addChild(root);
root.setParentNode(node);
AddTaxonomiesOfTaxonomy( root, tax );
// AddServicesOfTaxonomy( root, tax );
// AddResourcesCategoriesOfTaxonomy( root, tax );
}
if (showResourcesByTaxonomy)
AddResourcesCategoriesOfTaxonomy( node, taxonomy );
}
private void AddResourcesCategoriesOfTaxonomy(ui_TaxonomyTreeItem invisibleRoot2,
Taxonomy taxonomy) {
for (int i = 0; i < taxonomy.getCategories().size() ; i++) {
ResourceCategory resCateg = taxonomy.getCategories().get(i);
ui_TaxonomyTreeItem root = UiObjectsFactory.eINSTANCE.createui_TaxonomyTreeItem();//new TreeParent( resCateg );
root.setOfficeElement(resCateg);
invisibleRoot2.getChildNodes().add(root);// addChild(root);
root.setParentNode(invisibleRoot2);
AddSResourcesOfResourceCategory( root, resCateg );
}
}
private void AddSResourcesOfResourceCategory(ui_TaxonomyTreeItem invisibleRoot2,
ResourceCategory resCat ) {
for (int i = 0; i < resCat.getResourcelist().size() ; i++) {
ui_TaxonomyTreeItem root = UiObjectsFactory.eINSTANCE.createui_TaxonomyTreeItem();//new TreeObject( resCat.getResourcelist().get(i) );
root.setOfficeElement(resCat.getResourcelist().get(i));
invisibleRoot2.getChildNodes().add(root);// addChild(root);
root.setParentNode(invisibleRoot2);
}
}
private void AddResourcesByProvider(ui_TaxonomyTreeItem item,
ResourcesProvider rp) {
for( int i = 0; i < rp.getOfferedSiteList().size(); i++) {
Site site = rp.getOfferedSiteList().get(i);
ui_TaxonomyTreeItem siteItem = UiObjectsFactory.eINSTANCE.createui_TaxonomyTreeItem();
siteItem.setOfficeElement(site);
item.getChildNodes().add(siteItem);// addChild(root);
siteItem.setParentNode(item);
for(int j = 0; j<site.getOfferedResourcesList().size();j++){
ui_TaxonomyTreeItem resItem = UiObjectsFactory.eINSTANCE
.createui_TaxonomyTreeItem();// new TreeObject(
// office.getOfferedServices().get(i)
// );
OfferedResource r = site.getOfferedResourcesList().get(j);
resItem.setOfficeElement(r);
siteItem.getChildNodes().add(resItem);// addChild(root);
resItem.setParentNode(siteItem);
}
}
}
}