blob: 7aee41e554bef4f9fa5986a8bdab64e8f59e888e [file] [log] [blame]
package cdoclient;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
/**
* @author Eike Stepper
*/
public class ModelView extends ViewPart
{
public static final String ID = "CDOClient.view";
private TreeViewer viewer;
/**
* @author Eike Stepper
*/
class ViewContentProvider implements ITreeContentProvider
{
Model root = new Model("root", null);
public ViewContentProvider()
{
addRepository("tcp://repos.foo.org/repo1");
addRepository("tcp://repos.foo.org/repo2");
addRepository("jvm://filesystem/C:/Data/Repo");
}
void addRepository(String name)
{
Model repo = root.add(name, "repository");
Model packages = repo.add("Packages", "packages");
addPackage(packages, "http://www.foo.org/base/1.0");
addPackage(packages, "http://www.foo.org/base/1.1");
addPackage(packages, "http://www.foo.org/base/1.2");
addPackage(packages, "http://www.foo.org/billing/1.0");
addPackage(packages, "http://www.foo.org/billing/2.0");
Model resources = repo.add("Resources", "resources");
addBilling(resources.add("internal", "resource"), "Foo");
Model clients = resources.add("clients", "folder");
addBilling(clients.add("Client 3024", "resource"), "Eclipse Foundation");
addBilling(clients.add("Client 8745", "resource"), "Apache Foundation");
addBilling(clients.add("Client 9276", "resource"), "Mozilla Foundation");
addBilling(clients.add("Client 9339", "resource"), "Another Foundation");
}
void addPackage(Model packages, String name)
{
Model p = packages.add(name, "package");
{
Model c = p.add("Company", "EClass");
c.add("name : String", "EAttribute");
c.add("owner : String", "EAttribute");
c.add("partners : Company*", "EReference");
}
{
Model c = p.add("Customer", "EClass");
c.add("CDOMapping", "EAnnotation");
c.add("name : String", "EAttribute");
}
{
Model c = p.add("Order", "EClass");
c.add("id : int", "EAttribute");
c.add("state _ OrderState", "EAttribute");
c.add("customer : Customer", "EReference");
c.add("details : OrderDetail*", "EReference");
}
{
Model c = p.add("OrderState", "EEnum");
c.add("ORDERED", "EEnumLiteral");
c.add("DELIVERED", "EEnumLiteral");
c.add("BILLED", "EEnumLiteral");
c.add("PAYED", "EEnumLiteral");
}
}
void addBilling(Model model, String name)
{
Model company = model.add(name, "company");
Model products = company.add("Products", "products");
products.add("Apple", "product");
products.add("Pear", "product");
products.add("Orange", "product");
products.add("Pineapple", "product");
Model customers = company.add("Customers", "customers");
customers.add("Mr. Smith", "customer");
customers.add("Mrs. Marple", "customer");
customers.add("Mr. Stepper", "customer");
Model order100 = company.add("100 - Mr. Smith", "order");
order100.add("Apple (5x)", "orderdetail");
order100.add("Pear (10x)", "orderdetail");
Model order101 = company.add("101 - Mr. Smith", "order");
order101.add("Pineapple (1x)", "orderdetail");
order101.add("Pear (10x)", "orderdetail");
Model order102 = company.add("102 - Mr. Stepper", "order");
order102.add("Orange (5x)", "orderdetail");
order102.add("Pineapple (2x)", "orderdetail");
Model order103 = company.add("103 - Mr. Smith", "order");
order103.add("Apple (5x)", "orderdetail");
order103.add("Orange (10x)", "orderdetail");
}
public void inputChanged(Viewer v, Object oldInput, Object newInput)
{
}
public void dispose()
{
}
public Object[] getElements(Object parent)
{
return getChildren(parent);
}
public Object[] getChildren(Object parentElement)
{
Model model = null;
if (parentElement instanceof Model)
{
model = (Model)parentElement;
}
else if (parentElement == getViewSite())
{
model = root;
}
if (model != null)
{
return model.children.toArray(new Model[model.children.size()]);
}
return new Object[0];
}
public Object getParent(Object element)
{
if (element instanceof Model)
{
Model model = (Model)element;
return model.parent;
}
return null;
}
public boolean hasChildren(Object element)
{
return getChildren(element).length != 0;
}
}
/**
* @author Eike Stepper
*/
class ViewLabelProvider extends LabelProvider implements ITableLabelProvider
{
ImageRegistry images = new ImageRegistry();
public ViewLabelProvider()
{
}
public String getColumnText(Object obj, int index)
{
return getText(obj);
}
public Image getColumnImage(Object obj, int index)
{
return getImage(obj);
}
@Override
public Image getImage(Object obj)
{
try
{
return ((Model)obj).getImage();
}
catch (Exception ignore)
{
}
return null;
}
}
/**
* This is a callback that will allow us to create the viewer and initialize it.
*/
@Override
public void createPartControl(Composite parent)
{
viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(new ViewContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setInput(getViewSite());
viewer.addDoubleClickListener(new IDoubleClickListener()
{
public void doubleClick(DoubleClickEvent event)
{
IStructuredSelection s = (IStructuredSelection)event.getSelection();
Model element = (Model)s.getFirstElement();
ModelEditor.open(getViewSite().getPage(), element);
}
});
}
/**
* Passing the focus request to the viewer's control.
*/
@Override
public void setFocus()
{
viewer.getControl().setFocus();
}
}