View Javadoc
1   package org.argeo.people.web.pages;
2   
3   import java.util.Map;
4   
5   import javax.jcr.Node;
6   import javax.jcr.RepositoryException;
7   
8   import org.argeo.cms.ui.CmsUiProvider;
9   import org.argeo.connect.ConnectTypes;
10  import org.argeo.connect.resources.ResourcesService;
11  import org.argeo.eclipse.ui.EclipseUiUtils;
12  import org.argeo.people.PeopleException;
13  import org.argeo.people.PeopleService;
14  import org.argeo.people.PeopleTypes;
15  import org.argeo.people.web.parts.PeopleSearchCmp;
16  import org.eclipse.jface.viewers.DoubleClickEvent;
17  import org.eclipse.jface.viewers.IDoubleClickListener;
18  import org.eclipse.jface.viewers.IStructuredSelection;
19  import org.eclipse.jface.viewers.TableViewer;
20  import org.eclipse.jface.viewers.Viewer;
21  import org.eclipse.swt.SWT;
22  import org.eclipse.swt.custom.SashForm;
23  import org.eclipse.swt.layout.GridLayout;
24  import org.eclipse.swt.widgets.Composite;
25  import org.eclipse.swt.widgets.Control;
26  import org.eclipse.swt.widgets.Label;
27  
28  /** Default cms page layout for the People apps */
29  public class PeopleDefaultPage implements CmsUiProvider {
30  
31  	private ResourcesService resourcesService;
32  	private PeopleService peopleService;
33  	private Map<String, String> peopleIconPaths;
34  
35  	// Local UI Providers
36  	private CmsUiProvider orgPage;
37  	private CmsUiProvider personPage;
38  	// private CmsUiProvider tagLikeInstancePage;
39  
40  	public PeopleDefaultPage(ResourcesService resourcesService, PeopleService peopleService,
41  			Map<String, String> peopleIconPaths) {
42  		this.peopleService = peopleService;
43  		this.resourcesService = resourcesService;
44  		this.peopleIconPaths = peopleIconPaths;
45  		orgPage = new OrgPage(resourcesService, peopleService);
46  		personPage = new PersonPage(peopleService, resourcesService);
47  	}
48  
49  	@Override
50  	public Control createUi(Composite parent, Node context) throws RepositoryException {
51  		parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
52  		SashForm form = new SashForm(parent, SWT.HORIZONTAL);
53  		form.setLayoutData(EclipseUiUtils.fillAll());
54  		Composite leftPannelCmp = new Composite(form, SWT.NO_FOCUS);
55  		Composite rightPannelCmp = new Composite(form, SWT.NO_FOCUS);
56  		form.setWeights(new int[] { 2, 4 });
57  
58  		// A search on the left and the display on the right
59  		populateSearch(leftPannelCmp, context, rightPannelCmp);
60  		// default display
61  		if (!context.isNodeType(ConnectTypes.CONNECT_ENTITY))
62  			populateDefaultDisplay(rightPannelCmp, context);
63  		else
64  			refreshDisplay(rightPannelCmp, context);
65  
66  		return form;
67  	}
68  
69  	public Viewer populateSearch(Composite parent, Node context, final Composite targetComposite)
70  			throws RepositoryException {
71  		parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
72  		PeopleSearchCmp searchComp = new PeopleSearchCmp(parent, SWT.NO_FOCUS, resourcesService, peopleService,
73  				peopleIconPaths);
74  		searchComp.populate(context, true);
75  		searchComp.setLayoutData(EclipseUiUtils.fillAll());
76  
77  		TableViewer viewer = searchComp.getViewer();
78  		viewer.addDoubleClickListener(new IDoubleClickListener() {
79  			@Override
80  			public void doubleClick(DoubleClickEvent event) {
81  				Object firstObj = ((IStructuredSelection) event.getSelection()).getFirstElement();
82  				try {
83  					refreshDisplay(targetComposite, (Node) firstObj);
84  				} catch (RepositoryException e) {
85  					throw new PeopleException("unable to refresh display for " + context, e);
86  				}
87  			}
88  		});
89  		return null;
90  	}
91  
92  	public Control refreshDisplay(Composite parent, Node context) throws RepositoryException {
93  		EclipseUiUtils.clear(parent);
94  		if (context.isNodeType(PeopleTypes.PEOPLE_PERSON))
95  			return personPage.createUi(parent, context);
96  		else if (context.isNodeType(PeopleTypes.PEOPLE_ORG))
97  			return orgPage.createUi(parent, context);
98  		return null;
99  	}
100 
101 	public Control populateDefaultDisplay(Composite parent, Node context) throws RepositoryException {
102 		parent.setLayout(new GridLayout());
103 		Label lbl = new Label(parent, SWT.NONE);
104 		lbl.setText("Implement a default display");
105 		return lbl;
106 	}
107 }