View Javadoc
1   package org.argeo.connect.core;
2   
3   import java.util.List;
4   
5   import javax.jcr.Node;
6   import javax.jcr.RepositoryException;
7   import javax.jcr.Session;
8   
9   import org.argeo.connect.AppService;
10  import org.argeo.connect.ConnectException;
11  import org.argeo.connect.SystemAppService;
12  import org.argeo.eclipse.ui.EclipseUiUtils;
13  
14  public class DefaultSystemAppService extends AbstractAppService implements SystemAppService {
15  
16  	// Injected known AppWorkbenchServices: order is important, first found
17  	// result will be returned by the various methods.
18  	private List<AppService> knownAppServices;
19  
20  	@Override
21  	public Node publishEntity(Node parent, String nodeType, Node srcNode, boolean removeSrcNode)
22  			throws RepositoryException {
23  		for (AppService appService : knownAppServices) {
24  			if (appService.isKnownType(nodeType))
25  				return appService.publishEntity(parent, nodeType, srcNode, removeSrcNode);
26  		}
27  		return null;
28  	}
29  
30  	@Override
31  	public String getAppBaseName() {
32  		return OfficeConstants.SUITE_APP_BASE_NAME;
33  	}
34  
35  	@Override
36  	public String getBaseRelPath(String nodeType) {
37  		for (AppService appService : knownAppServices) {
38  			if (appService.isKnownType(nodeType))
39  				return appService.getBaseRelPath(nodeType);
40  		}
41  		return null;
42  		// return getAppBaseName();
43  	}
44  
45  	@Override
46  	public String getDefaultRelPath(Node entity) throws RepositoryException {
47  		for (AppService appService : knownAppServices) {
48  			if (appService.isKnownType(entity))
49  				return appService.getDefaultRelPath(entity);
50  		}
51  		return null;
52  	}
53  
54  	@Override
55  	public String getMainNodeType(Node node) {
56  		for (AppService appService : knownAppServices) {
57  			String foundType = appService.getMainNodeType(node);
58  			if (EclipseUiUtils.notEmpty(foundType))
59  				return foundType;
60  		}
61  		return null;
62  	}
63  
64  	@Override
65  	public String getDefaultRelPath(Session session, String nodetype, String id) {
66  		for (AppService appService : knownAppServices) {
67  			if (appService.isKnownType(nodetype))
68  				return appService.getDefaultRelPath(session, nodetype, id);
69  		}
70  		return null;
71  	}
72  
73  	/** Insures the correct service is called on save */
74  	@Override
75  	public Node saveEntity(Node entity, boolean publish) {
76  		for (AppService appService : knownAppServices) {
77  			if (appService.isKnownType(entity))
78  				return appService.saveEntity(entity, publish);
79  		}
80  		throw new ConnectException("Unknown NodeType for " + entity + ". Cannot save");
81  		// return AppService.super.saveEntity(entity, publish);
82  	}
83  
84  	@Override
85  	public boolean isKnownType(Node entity) {
86  		for (AppService appService : knownAppServices) {
87  			if (appService.isKnownType(entity))
88  				return true;
89  		}
90  		return false;
91  	}
92  
93  	@Override
94  	public boolean isKnownType(String nodeType) {
95  		for (AppService appService : knownAppServices) {
96  			if (appService.isKnownType(nodeType))
97  				return true;
98  		}
99  		return false;
100 	}
101 
102 	public void setKnownAppServices(List<AppService> knownAppServices) {
103 		this.knownAppServices = knownAppServices;
104 	}
105 
106 }