2 * This document is a part of the source code and related artifacts
3 * for CollectionSpace, an open source collections management system
4 * for museums and related institutions:
6 * http://www.collectionspace.org
7 * http://wiki.collectionspace.org
9 * Copyright 2009 University of California at Berkeley
11 * Licensed under the Educational Community License (ECL), Version 2.0.
12 * You may not use this file except in compliance with this License.
14 * You may obtain a copy of the ECL 2.0 License at
16 * https://source.collectionspace.org/collection-space/LICENSE.txt
18 * Unless required by applicable law or agreed to in writing, software
19 * distributed under the License is distributed on an "AS IS" BASIS,
20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 * See the License for the specific language governing permissions and
22 * limitations under the License.
24 * This document is a part of the source code and related artifacts
25 * for CollectionSpace, an open source collections management system
26 * for museums and related institutions:
28 * http://www.collectionspace.org
29 * http://wiki.collectionspace.org
31 * Copyright 2009 University of California at Berkeley
33 * Licensed under the Educational Community License (ECL), Version 2.0.
34 * You may not use this file except in compliance with this License.
36 * You may obtain a copy of the ECL 2.0 License at
38 * https://source.collectionspace.org/collection-space/LICENSE.txt
40 * Unless required by applicable law or agreed to in writing, software
41 * distributed under the License is distributed on an "AS IS" BASIS,
42 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
43 * See the License for the specific language governing permissions and
44 * limitations under the License.
47 * To change this template, choose Tools | Templates
48 * and open the template in the editor.
50 package org.collectionspace.services.account.storage;
52 import java.util.List;
53 import java.util.regex.Matcher;
54 import java.util.regex.Pattern;
55 import org.collectionspace.services.account.AccountsCommon;
56 import org.collectionspace.services.common.context.ServiceContext;
57 import org.collectionspace.services.common.document.DocumentHandler.Action;
58 import org.collectionspace.services.common.document.InvalidDocumentException;
59 import org.collectionspace.services.common.document.ValidatorHandler;
60 import org.slf4j.Logger;
61 import org.slf4j.LoggerFactory;
67 public class AccountValidatorHandler implements ValidatorHandler {
69 final Logger logger = LoggerFactory.getLogger(AccountValidatorHandler.class);
72 public void validate(Action action, ServiceContext ctx)
73 throws InvalidDocumentException {
74 if (logger.isDebugEnabled()) {
75 logger.debug("validate() action=" + action.name());
78 AccountsCommon account = (AccountsCommon) ctx.getInput();
79 StringBuilder msgBldr = new StringBuilder("validate() ");
80 boolean invalid = false;
82 if (action.equals(Action.CREATE)) {
83 //FIXME tenant would be retrieved from security context once
84 //authentication is made mandatory, no need for validation
85 List<AccountsCommon.Tenant> tl = account.getTenant();
86 if (tl == null || tl.size() == 0) {
87 msgBldr.append("\ntenant : missing information!");
90 //create specific validation here
91 if (account.getScreenName() == null || account.getScreenName().isEmpty()) {
93 msgBldr.append("\nscreenName : missing");
95 if (account.getUserId() == null || account.getUserId().isEmpty()) {
97 msgBldr.append("\nuserId : missing");
99 if (account.getEmail() == null || account.getEmail().isEmpty()) {
101 msgBldr.append("\nemail : missing");
103 if (invalidEmail(account.getEmail(), msgBldr)) {
107 } else if (action.equals(Action.UPDATE)) {
108 //update specific validation here
109 if (account.getScreenName() != null && account.getScreenName().isEmpty()) {
111 msgBldr.append("\nscreenName : cannot be changed!");
113 if (account.getPassword() != null
114 && (account.getUserId() == null || account.getUserId().isEmpty())) {
116 msgBldr.append("\npassword : userId is needed");
118 if (account.getEmail() != null) {
119 if (invalidEmail(account.getEmail(), msgBldr)) {
125 String msg = msgBldr.toString();
127 throw new InvalidDocumentException(msg);
129 } catch (InvalidDocumentException ide) {
131 } catch (Exception e) {
132 throw new InvalidDocumentException(e);
136 private boolean invalidEmail(String email, StringBuilder msgBldr) {
137 boolean invalid = false;
138 Pattern p = Pattern.compile("^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[_A-Za-z0-9-]+)");
139 Matcher m = p.matcher(email);
142 msgBldr.append("\nemail : invalid " + email);