View Javadoc
1   package org.argeo.people.e4.handlers;
2   
3   import javax.inject.Inject;
4   import javax.inject.Named;
5   import javax.jcr.Node;
6   import javax.jcr.Repository;
7   import javax.jcr.RepositoryException;
8   import javax.jcr.Session;
9   
10  import org.argeo.connect.e4.parts.AbstractConnectEditor;
11  import org.argeo.connect.resources.ResourcesService;
12  import org.argeo.connect.ui.SystemWorkbenchService;
13  import org.argeo.jcr.JcrUtils;
14  import org.argeo.people.PeopleException;
15  import org.argeo.people.PeopleService;
16  import org.argeo.people.PeopleTypes;
17  import org.argeo.people.ui.dialogs.EditJobDialog;
18  import org.eclipse.e4.core.di.annotations.Execute;
19  import org.eclipse.e4.ui.model.application.ui.basic.MPart;
20  import org.eclipse.jface.dialogs.Dialog;
21  import org.eclipse.jface.window.Window;
22  import org.eclipse.swt.widgets.Display;
23  
24  /**
25   * Opens a dialog to create or edit a position of a person in an organisation,
26   * e.g. a job Might be called from a person or an organisation editor.
27   * 
28   * 
29   * Positions are currently stored as children of an existing person. So when
30   * trying to add or edit a person to a given organisation, the "isBackward" flag
31   * must be true. When creating a new job, this flag is optional and not used: it
32   * can be deduced from the passed node type.
33   * 
34   */
35  public class EditJob {
36  	// FIXME make command id configurable
37  	public final static String ID = "org.argeo.suite.e4.command.editJob";
38  	// public final static ImageDescriptor DEFAULT_IMG_DESCRIPTOR =
39  	// PeopleRapPlugin.getImageDescriptor("icons/add.png");
40  	public final static String PARAM_RELEVANT_NODE_JCR_ID = "relevantNodeJcrId";
41  	public final static String PARAM_IS_BACKWARD = "isBackward";
42  
43  	/* DEPENDENCY INJECTION */
44  	@Inject
45  	private Repository repository;
46  	@Inject
47  	private ResourcesService resourcesService;
48  	@Inject
49  	private PeopleService peopleService;
50  	@Inject
51  	private SystemWorkbenchService systemWorkbenchService;
52  
53  	@Execute
54  	public void execute(MPart mPart, @Named(PARAM_RELEVANT_NODE_JCR_ID) String relevantNodeJcrId) {
55  		execute(mPart, relevantNodeJcrId, null);
56  	}
57  
58  	@Execute
59  	public void execute(MPart mPart, @Named(PARAM_RELEVANT_NODE_JCR_ID) String relevantNodeJcrId,
60  			@Named(PARAM_IS_BACKWARD) String isBackwardStr) {
61  		Session session = null;
62  		try {
63  			session = repository.login();
64  
65  			Node relevantNode = session.getNodeByIdentifier(relevantNodeJcrId);
66  
67  			Dialog diag;
68  			// boolean isBackward = false;
69  			if (relevantNode.isNodeType(PeopleTypes.PEOPLE_JOB)) {
70  				// Edit an existing job
71  				// isBackward = new Boolean(event.getParameter(PARAM_IS_BACKWARD));
72  				boolean isBackward = isBackwardStr == null ? false : new Boolean(isBackwardStr);
73  				diag = new EditJobDialog(Display.getCurrent().getActiveShell(), "Edit employee information",
74  						resourcesService, peopleService, systemWorkbenchService, relevantNode, null, isBackward);
75  			} else {
76  				// Create a new job
77  				boolean isBackward = relevantNode.isNodeType(PeopleTypes.PEOPLE_ORG);
78  				diag = new EditJobDialog(Display.getCurrent().getActiveShell(), "Edit position", resourcesService,
79  						peopleService, systemWorkbenchService, null, relevantNode, isBackward);
80  			}
81  
82  			int result = diag.open();
83  			if (result == Window.OK) {
84  				// IEditorPart iep =
85  				// HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().getActiveEditor();
86  				// if (iep != null && iep instanceof AbstractConnectEditor)
87  				// ((AbstractConnectEditor) iep).forceRefresh();
88  				((AbstractConnectEditor) mPart.getObject()).forceRefresh();
89  			}
90  		} catch (RepositoryException e) {
91  			throw new PeopleException("unexpected JCR error while opening " + "editor for newly created programm", e);
92  		} finally {
93  			JcrUtils.logoutQuietly(session);
94  		}
95  	}
96  
97  	/* DEPENDENCY INJECTION */
98  	// public void setRepository(Repository repository) {
99  	// this.repository = repository;
100 	// }
101 	//
102 	// public void setResourcesService(ResourcesService resourcesService) {
103 	// this.resourcesService = resourcesService;
104 	// }
105 	//
106 	// public void setPeopleService(PeopleService peopleService) {
107 	// this.peopleService = peopleService;
108 	// }
109 	//
110 	// public void setSystemWorkbenchService(SystemWorkbenchService
111 	// systemWorkbenchService) {
112 	// this.systemWorkbenchService = systemWorkbenchService;
113 	// }
114 }