blob: 9f34418b5379400f62b3863a1a6f94c13abe4d31 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.bpel.ui.details.providers;
import java.util.ArrayList;
import org.eclipse.bpel.model.resource.BPELResourceSetImpl;
import org.eclipse.bpel.model.util.BPELUtils;
import org.eclipse.bpel.wsil.model.inspection.Inspection;
import org.eclipse.bpel.wsil.model.inspection.Link;
import org.eclipse.bpel.wsil.model.inspection.WSILDocument;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
/**
* WSIIL Content Provider
*
* @author Michal Chmielewski (michal.chmielewski@oracle.com)
* @author Edward Gee
* @date Apr 5, 2007
*
*/
@SuppressWarnings({"unchecked","nls"})
public class WSILContentProvider implements ITreeContentProvider {
/**
* Flatten the inspection document ( do not return root document )
*/
static public final int FLATTEN = 0x1;
int fMode = 0;
/**
* Set the mode of operation of this content provider.
* @param mode
*/
public void setMode ( int mode ) {
fMode = mode;
}
/** (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
*/
public Object[] getChildren (Object arg0) {
ArrayList<Object> items = new ArrayList<Object>();
if (arg0 instanceof WSILDocument) {
if ((fMode & FLATTEN) == FLATTEN) {
arg0 = ((WSILDocument)arg0).getInspection() ;
} else {
items.add(((WSILDocument)arg0).getInspection());
}
}
if (arg0 instanceof Inspection) {
Inspection insp = (Inspection) arg0;
items.addAll( insp.getServices() );
items.addAll( insp.getLinks() );
}
if (arg0 instanceof Link) {
Link link = (Link) arg0;
BPELResourceSetImpl resourceSet = BPELUtils.slightlyHackedResourceSet ( link );
URI linkURI = null;
try {
linkURI = URI.createURI( link.getLocation() );
if (linkURI.isRelative()) {
// path is relative to me ...
URI parentURI = link.eResource().getURI();
linkURI = linkURI.resolve(parentURI);
}
} catch (Throwable t) {
items.add(t);
return items.toArray();
}
Resource resource = null;
try {
resource = resourceSet.getResource(linkURI, true, "wsil");
} catch (Throwable t) {
items.add(t);
return items.toArray();
}
if (resource != null) {
Object root = resource.getContents().get(0);
if (root instanceof WSILDocument) {
WSILDocument doc = (WSILDocument) root;
items.addAll( doc.getInspection().getLinks() );
items.addAll( doc.getInspection().getServices() );
} else {
items.add( new Exception("Not a WSIL document") );
}
}
}
return items.toArray();
}
/** (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
*/
public Object getParent(Object arg0) {
if (arg0 instanceof EObject) {
EObject eObj = (EObject) arg0;
return eObj.eContainer();
}
return null;
}
/**
* @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
*/
public boolean hasChildren(Object arg0) {
return (arg0 instanceof WSILDocument ||
arg0 instanceof Inspection ||
arg0 instanceof Link) ;
}
/**
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
public Object[] getElements (Object arg0) {
return getChildren(arg0);
}
/**
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose() {
}
/**
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}