public DataModels(BundleContext bc) {
for (Bundle bundle : bc.getBundles())
- processBundle(bundle);
+ processBundle(bundle, null);
bc.addBundleListener(this);
}
@Override
public void bundleChanged(BundleEvent event) {
if (event.getType() == Bundle.RESOLVED) {
- processBundle(event.getBundle());
+ processBundle(event.getBundle(), null);
} else if (event.getType() == Bundle.UNINSTALLED) {
BundleWiring wiring = event.getBundle().adapt(BundleWiring.class);
List<BundleCapability> providedDataModels = wiring.getCapabilities(CMS_DATA_MODEL_NAMESPACE);
}
- protected void processBundle(Bundle bundle) {
+ protected void processBundle(Bundle bundle, List<Bundle> scannedBundles) {
+ if (scannedBundles != null && scannedBundles.contains(bundle))
+ throw new IllegalStateException("Cycle in CMS data model requirements for " + bundle);
BundleWiring wiring = bundle.adapt(BundleWiring.class);
if (wiring == null) {
int bundleState = bundle.getState();
List<BundleWire> requiredDataModels = wiring.getRequiredWires(CMS_DATA_MODEL_NAMESPACE);
// process requirements first
for (BundleWire bundleWire : requiredDataModels) {
- processBundle(bundleWire.getProvider().getBundle());
+ List<Bundle> nextScannedBundles = new ArrayList<>();
+ if (scannedBundles != null)
+ nextScannedBundles.addAll(scannedBundles);
+ nextScannedBundles.add(bundle);
+ Bundle providerBundle = bundleWire.getProvider().getBundle();
+ processBundle(providerBundle, nextScannedBundles);
}
for (BundleCapability bundleCapability : providedDataModels) {
String name = (String) bundleCapability.getAttributes().get(DataModelNamespace.NAME);
import javax.security.auth.login.LoginContext;
import org.argeo.cms.CmsException;
-import org.argeo.jackrabbit.security.JackrabbitSecurityUtils;
import org.argeo.jcr.JcrRepositoryWrapper;
import org.argeo.jcr.JcrUtils;
import org.argeo.node.NodeConstants;
private SimpleDateFormat usersDatePath = new SimpleDateFormat("YYYY/MM");
private String defaultHomeWorkspace = NodeConstants.HOME;
- private String defaultGroupsWorkspace = NodeConstants.GROUPS;
- private String defaultGuestsWorkspace = NodeConstants.GUESTS;
+ private String defaultGroupsWorkspace = NodeConstants.SRV;
+// private String defaultGuestsWorkspace = NodeConstants.GUESTS;
private final boolean remote;
public HomeRepository(Repository repository, boolean remote) {
}
}
- @Override
- public Session login(Credentials credentials, String workspaceName)
- throws LoginException, NoSuchWorkspaceException, RepositoryException {
- if (workspaceName == null) {
- return super.login(credentials, getUserHomeWorkspace());
- } else {
- return super.login(credentials, workspaceName);
- }
- }
+// @Override
+// public Session login(Credentials credentials, String workspaceName)
+// throws LoginException, NoSuchWorkspaceException, RepositoryException {
+// if (workspaceName == null) {
+// return super.login(credentials, getUserHomeWorkspace());
+// } else {
+// return super.login(credentials, workspaceName);
+// }
+// }
protected String getUserHomeWorkspace() {
// TODO base on JAAS Subject metadata
return defaultGroupsWorkspace;
}
- protected String getGuestsWorkspace() {
- // TODO base on JAAS Subject metadata
- return defaultGuestsWorkspace;
- }
+// protected String getGuestsWorkspace() {
+// // TODO base on JAAS Subject metadata
+// return defaultGuestsWorkspace;
+// }
@Override
protected void processNewSession(Session session, String workspaceName) {
return;
String userHomeWorkspace = getUserHomeWorkspace();
- if (workspaceName != null && !workspaceName.equals(userHomeWorkspace))
+ if (workspaceName == null || !workspaceName.equals(userHomeWorkspace))
return;
if (checkedUsers.contains(username))
userHome = adminSession.getRootNode().addNode(userId);
// userHome.addMixin(NodeTypes.NODE_USER_HOME);
userHome.addMixin(NodeType.MIX_CREATED);
+ userHome.addMixin(NodeType.MIX_TITLE);
userHome.setProperty(Property.JCR_ID, username);
+ // TODO use display name
+ userHome.setProperty(Property.JCR_TITLE, userId);
// userHome.setProperty(NodeNames.LDAP_UID, username);
adminSession.save();
// newWorkgroup = JcrUtils.mkdirs(adminSession.getNode(groupsBasePath), relPath, NodeType.NT_UNSTRUCTURED);
// newWorkgroup.addMixin(NodeTypes.NODE_GROUP_HOME);
newWorkgroup.addMixin(NodeType.MIX_CREATED);
+ newWorkgroup.addMixin(NodeType.MIX_TITLE);
newWorkgroup.setProperty(Property.JCR_ID, dn.toString());
+ newWorkgroup.setProperty(Property.JCR_TITLE, cn);
// newWorkgroup.setProperty(NodeNames.LDAP_CN, cn);
adminSession.save();
JcrUtils.addPrivilege(adminSession, newWorkgroup.getPath(), dn.toString(), Privilege.JCR_ALL);