001: /*
002: * File : $Source: /usr/local/cvs/alkacon/com.alkacon.opencms.registration/src/com/alkacon/opencms/registration/CmsRegistrationXmlContentHandler.java,v $
003: * Date : $Date: 2008-02-19 13:22:30 $
004: * Version: $Revision: 1.1 $
005: *
006: * This library is part of OpenCms -
007: * the Open Source Content Mananagement System
008: *
009: * Copyright (C) 2005 Alkacon Software GmbH (http://www.alkacon.com)
010: *
011: * This library is free software; you can redistribute it and/or
012: * modify it under the terms of the GNU Lesser General Public
013: * License as published by the Free Software Foundation; either
014: * version 2.1 of the License, or (at your option) any later version.
015: *
016: * This library is distributed in the hope that it will be useful,
017: * but WITHOUT ANY WARRANTY; without even the implied warranty of
018: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: * Lesser General Public License for more details.
020: *
021: * For further information about Alkacon Software GmbH, please see the
022: * company website: http://www.alkacon.com
023: *
024: * For further information about OpenCms, please see the
025: * project website: http://www.opencms.org
026: *
027: * You should have received a copy of the GNU Lesser General Public
028: * License along with this library; if not, write to the Free Software
029: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
030: */
031:
032: package com.alkacon.opencms.registration;
033:
034: import com.alkacon.opencms.formgenerator.CmsForm;
035:
036: import org.opencms.file.CmsFile;
037: import org.opencms.file.CmsGroup;
038: import org.opencms.file.CmsObject;
039: import org.opencms.main.CmsException;
040: import org.opencms.main.OpenCms;
041: import org.opencms.security.CmsOrganizationalUnit;
042: import org.opencms.security.CmsRole;
043: import org.opencms.util.CmsStringUtil;
044: import org.opencms.xml.content.CmsDefaultXmlContentHandler;
045: import org.opencms.xml.content.CmsXmlContent;
046: import org.opencms.xml.types.I_CmsXmlContentValue;
047:
048: import java.util.ArrayList;
049: import java.util.Arrays;
050: import java.util.Iterator;
051: import java.util.List;
052: import java.util.Locale;
053:
054: /**
055: * Xml content handler for the webuser registration.<p>
056: *
057: * @author Michael Moossen
058: *
059: * @version $Revision: 1.1 $
060: *
061: * @since 7.0.3
062: */
063: public class CmsRegistrationXmlContentHandler extends
064: CmsDefaultXmlContentHandler {
065:
066: /**
067: * Default constructor.<p>
068: */
069: public CmsRegistrationXmlContentHandler() {
070:
071: super ();
072: }
073:
074: /**
075: * @see org.opencms.xml.content.CmsDefaultXmlContentHandler#prepareForWrite(org.opencms.file.CmsObject, org.opencms.xml.content.CmsXmlContent, org.opencms.file.CmsFile)
076: */
077: public CmsFile prepareForWrite(CmsObject cms,
078: CmsXmlContent content, CmsFile file) throws CmsException {
079:
080: // for each locale
081: Iterator locales = content.getLocales().iterator();
082: while (locales.hasNext()) {
083: Locale locale = (Locale) locales.next();
084: // check the account manager role for the given organizational unit
085: CmsOrganizationalUnit ou = OpenCms
086: .getOrgUnitManager()
087: .readOrganizationalUnit(
088: cms,
089: content
090: .getStringValue(
091: cms,
092: CmsRegistrationForm.NODE_ACTION
093: + "/"
094: + CmsRegistrationForm.NODE_ORGANIZATIONALUNIT,
095: locale));
096: OpenCms.getRoleManager().checkRole(cms,
097: CmsRole.ACCOUNT_MANAGER.forOrgUnit(ou.getName()));
098: // check the account manager role for the organizational unit of the given group
099: if (content.getValue(CmsRegistrationForm.NODE_ACTION + "/"
100: + CmsRegistrationForm.NODE_GROUP, locale) != null) {
101: String groupName = content.getStringValue(cms,
102: CmsRegistrationForm.NODE_ACTION + "/"
103: + CmsRegistrationForm.NODE_GROUP,
104: locale);
105: if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(groupName)) {
106: CmsGroup group = cms.readGroup(groupName);
107: OpenCms.getRoleManager().checkRole(
108: cms,
109: CmsRole.ACCOUNT_MANAGER.forOrgUnit(group
110: .getOuFqn()));
111: }
112: }
113: // check mandatory fields
114: List mandatories = new ArrayList(
115: Arrays.asList(new String[] { "email", "password",
116: "login" }));
117: if (Boolean
118: .valueOf(
119: content
120: .getStringValue(
121: cms,
122: CmsRegistrationForm.NODE_ACTION
123: + "/"
124: + CmsRegistrationForm.NODE_EMAILASLOGIN,
125: locale)).booleanValue()) {
126: mandatories.remove(2);
127: }
128: Iterator fields = content.getValues(
129: CmsForm.NODE_INPUTFIELD, locale).iterator();
130: while (fields.hasNext()) {
131: I_CmsXmlContentValue inputField = (I_CmsXmlContentValue) fields
132: .next();
133: String stringValue = content.getStringValue(cms,
134: inputField.getPath() + "/"
135: + CmsForm.NODE_FIELDLABEL, locale);
136: if (mandatories.contains(stringValue)) {
137: mandatories.remove(stringValue);
138: } else {
139: int pos = stringValue.lastIndexOf("|");
140: if ((pos >= 0) && (pos < stringValue.length() - 1)) {
141: stringValue = stringValue.substring(pos + 1);
142: if (mandatories.contains(stringValue)) {
143: mandatories.remove(stringValue);
144: }
145: }
146: }
147: }
148: if (!mandatories.isEmpty()) {
149: throw new CmsException(Messages.get().container(
150: Messages.ERR_MANDATORY_FIELDS_MISSING_1,
151: mandatories));
152: }
153: }
154: return super.prepareForWrite(cms, content, file);
155: }
156: }
|