[Yanel-commits] rev 53770 -
public/yanel/trunk/src/contributions/resources/security-api/src/java/org/wyona/yanel/impl/resources/securityapi
michi at wyona.com
michi at wyona.com
Thu Oct 7 13:25:11 CEST 2010
Author: michi
Date: 2010-10-07 13:25:11 +0200 (Thu, 07 Oct 2010)
New Revision: 53770
Modified:
public/yanel/trunk/src/contributions/resources/security-api/src/java/org/wyona/yanel/impl/resources/securityapi/UserManagerResource.java
Log:
error status code and message added re create group validation and refactoring re replacing StringBuilder by DOM started
Modified: public/yanel/trunk/src/contributions/resources/security-api/src/java/org/wyona/yanel/impl/resources/securityapi/UserManagerResource.java
===================================================================
--- public/yanel/trunk/src/contributions/resources/security-api/src/java/org/wyona/yanel/impl/resources/securityapi/UserManagerResource.java 2010-10-07 11:06:54 UTC (rev 53769)
+++ public/yanel/trunk/src/contributions/resources/security-api/src/java/org/wyona/yanel/impl/resources/securityapi/UserManagerResource.java 2010-10-07 11:25:11 UTC (rev 53770)
@@ -14,6 +14,11 @@
import org.wyona.security.core.api.User;
import org.wyona.security.core.api.UserManager;
+import org.wyona.commons.xml.XMLHelper;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.io.ByteArrayInputStream;
@@ -34,6 +39,8 @@
private final String SYNCHRONIZATION_PROPERTIES = "synchronization.properties";
private final String SYNC_PROP_NAME = "last-successful-synchronization";
+
+ private static final String NAMESPACE = "http://www.wyona.org/yanel/security/1.0";
@Override
protected InputStream getContentXML(String viewId) {
@@ -43,11 +50,22 @@
StringBuilder sb = new StringBuilder("<?xml version=\"1.0\"?>");
sb.append("<security-api>");
+ // TODO: Replace StringBuilder by DOM
+/*
+ Document responseDoc = XMLHelper.createDocument("security-api", NAMESPACE);
+ Element rootElement = responseDoc.getDocumentElement();
+*/
+ Element rootElement = null;
try {
String usecase = getEnvironment().getRequest().getParameter("yanel.usecase");
if (usecase != null) {
log.debug("Yanel usecase: " + usecase);
sb.append("<yanel-usecase>" + usecase + "</yanel-usecase>");
+/*
+ Element usecaseElement = (Element) rootElement.appendChild(responseDoc.createElement("yanel-usecase"));
+ //Element usecaseElement = (Element) rootElement.appendChild(responseDoc.createElementNS(NAMESPACE, "yanel-usecase"));
+ usecaseElement.appendChild(responseDoc.createTextNode(usecase));
+*/
if (usecase.equals("getusers")) {
boolean refresh = true;
if (getResourceConfigProperty("refresh-users") != null) {
@@ -70,7 +88,7 @@
deleteGroup(getEnvironment().getRequest().getParameter("id"));
} else if (usecase.equals("creategroup")) {
log.debug("Try to create group: " + getEnvironment().getRequest().getParameter("id"));
- createGroup(getEnvironment().getRequest().getParameter("id"), getEnvironment().getRequest().getParameter("name"));
+ createGroup(getEnvironment().getRequest().getParameter("id"), getEnvironment().getRequest().getParameter("name"), sb, rootElement);
} else if (usecase.equals("importuser")) {
log.debug("Import user: " + getEnvironment().getRequest().getParameter("id"));
importUser(getEnvironment().getRequest().getParameter("id"));
@@ -79,11 +97,14 @@
//org.wyona.yarep.core.Node rootNode = getRealm().getIdentitiesRepository().getRootNode().getNode("users");
org.wyona.yarep.core.Node rootNode = getRealm().getRepository().getRootNode();
if (getEnvironment().getRequest().getParameter("get-last-date") != null) {
+ //Element lastSuccessfulSyncElement = (Element) rootElement.appendChild(responseDoc.createElement("last-successful-synchronization"));
if (rootNode.hasNode(SYNCHRONIZATION_PROPERTIES)) {
sb.append("<last-successful-synchronization date=\"" + rootNode.getNode(SYNCHRONIZATION_PROPERTIES).getProperty(SYNC_PROP_NAME).getDate() + "\"/>");
+ //lastSuccessfulSyncElement.setAttribute("date", "" + rootNode.getNode(SYNCHRONIZATION_PROPERTIES).getProperty(SYNC_PROP_NAME).getDate());
} else {
log.warn("Not synchronized yet!");
sb.append("<last-successful-synchronization date=\"" + "NOT_SYNCHRONIZED_YET" + "\"/>");
+ //lastSuccessfulSyncElement.setAttribute("date", "NOT_SYNCHRONIZED_YET");
}
} else {
// TODO: Lock ...
@@ -100,7 +121,7 @@
node.setProperty(SYNC_PROP_NAME, new java.util.Date());
}
} else if (usecase.equals("getgroups")) {
- sb.append(getGroupsAsXML());
+ sb.append(getGroupsAsXML(rootElement));
} else if (usecase.equals("add-members-to-group")) {
addMembersToGroup(getEnvironment().getRequest().getParameter("id"));
} else if (usecase.equals("remove-members-from-group")) {
@@ -113,21 +134,36 @@
boolean recursively = "1".equals(recursivelyText);
deletePolicy(path, recursively);
sb.append("<policy-deleted path=\"" + path + "\" recursively=\"" + recursively + "\"/>");
+/*
+ Element policyDeletedElement = (Element) rootElement.appendChild(responseDoc.createElement("policy-deleted"));
+ policyDeletedElement.setAttribute("path", path);
+ policyDeletedElement.setAttribute("recursively", "" + recursively);
+*/
} else {
log.warn("No such usecase implemented: " + usecase);
sb.append("<no-such-yanel-usecase-implemented>" + usecase + "</no-such-yanel-usecase-implemented>");
+/*
+ Element noSuchUsecaseElement = (Element) rootElement.appendChild(responseDoc.createElement("no-such-yanel-usecase-implemented"));
+ noSuchUsecaseElement.appendChild(responseDoc.createTextNode(usecase));
+*/
}
} else {
log.warn("No usecase specified!");
sb.append("<no-yanel-usecase/>");
+ //rootElement.appendChild(responseDoc.createElement("no-yanel-usecase"));
}
} catch(Exception e) {
log.error(e, e);
sb.append("<exception>" + e.getMessage() + "</exception>");
+/*
+ Element exceptionElement = (Element) rootElement.appendChild(responseDoc.createElement("exception"));
+ exceptionElement.appendChild(responseDoc.createTextNode(e.getMessage()));
+*/
}
sb.append("</security-api>");
return new ByteArrayInputStream(sb.toString().getBytes());
+ //return new ByteArrayInputStream(XMLHelper.documentToString(responseDoc, false, true, null).getBytes());
}
@Override
@@ -229,7 +265,7 @@
* @param id Group ID
* @param name Group name
*/
- private void createGroup(String id, String name) throws AccessManagementException {
+ private void createGroup(String id, String name, StringBuilder sb, Element rootElement) throws AccessManagementException {
GroupManager gm = getRealm().getIdentityManager().getGroupManager();
int MAX_LENGTH = 30;
if (id != null && name != null) {
@@ -238,7 +274,10 @@
} else if (id.length() > MAX_LENGTH) { // TODO: Make this configurable
log.warn("ID '" + id + "' is more than '" + MAX_LENGTH + "' characters, hence will not be created!");
} else if (gm.existsGroup(id)) {
- log.warn("Group with ID '" + id + "' already exists, hence will not be created!");
+ String message = "Group with ID '" + id + "' already exists, hence will not be created!";
+ log.warn(message);
+ sb.append("<exception status=\"400\">" + message + "</exception>");
+ //rootElement.appendChild();
} else if (id.contains("/") || id.contains("*") || id.contains("?") || id.contains(".")) { // TODO: Make this configurable
log.warn("ID '" + id + "' contains special characters (/*?.), hence will not be created!");
} else {
@@ -310,8 +349,9 @@
/**
* Get all groups
+ * @param rootElement XML document which will be sent as response to the client
*/
- private StringBuilder getGroupsAsXML() throws Exception {
+ private StringBuilder getGroupsAsXML(Element rootElement) throws Exception {
GroupManager gm = getRealm().getIdentityManager().getGroupManager();
Group[] groups = gm.getGroups();
Arrays.sort(groups, new ItemIDComparator());
More information about the Yanel-commits
mailing list