/**
* Copyright 2013 Tommi S.E. Laukkanen
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.bubblecloud.ilves.site;
import com.vaadin.data.Validator;
import com.vaadin.data.util.converter.StringToIntegerConverter;
import com.vaadin.data.validator.EmailValidator;
import com.vaadin.data.validator.IntegerRangeValidator;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.PasswordField;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import org.bubblecloud.ilves.component.field.DatePartField;
import org.bubblecloud.ilves.component.field.GroupField;
import org.bubblecloud.ilves.component.field.TimestampField;
import org.bubblecloud.ilves.component.field.UserField;
import org.bubblecloud.ilves.component.formatter.CertificateConverter;
import org.bubblecloud.ilves.component.formatter.DatePartConverter;
import org.bubblecloud.ilves.component.formatter.TimestampConverter;
import org.bubblecloud.ilves.component.grid.FieldDescriptor;
import org.bubblecloud.ilves.exception.SiteException;
import org.bubblecloud.ilves.model.*;
import java.util.*;
/**
* Default Site Kit field descriptors.
*
* @author Tommi S.E. Laukkanen
*/
public final class SiteFields {
/**
* Flag reflecting whether initialization of field descriptors has been done
* for JVM.
*/
private static boolean initialized = false;
/**
* Map of entity class field descriptors.
*/
private static Map<Class<?>, List<FieldDescriptor>> fieldDescriptors = new HashMap<Class<?>, List<FieldDescriptor>>();
/**
* Adds a field descriptor for given entity class.
* @param entityClass The entity class.
* @param fieldDescriptor The field descriptor to add.
*/
public static void add(final Class<?> entityClass, final FieldDescriptor fieldDescriptor) {
if (!fieldDescriptors.containsKey(entityClass)) {
fieldDescriptors.put(entityClass, new ArrayList<FieldDescriptor>());
}
fieldDescriptors.get(entityClass).add(fieldDescriptor);
}
/**
* Adds a field descriptor for given entity class.
* @param entityClass The entity class.
* @param fieldDescriptor The field descriptor to add.
* @param validator The field validator.
*/
public static void add(final Class<?> entityClass, final FieldDescriptor fieldDescriptor, final Validator validator) {
fieldDescriptor.addValidator(validator);
add(entityClass, fieldDescriptor);
}
/**
* Gets field descriptors for given entity class.
* @param entityClass The entity class.
* @return an unmodifiable list of field descriptors.
*/
public static List<FieldDescriptor> getFieldDescriptors(final Class<?> entityClass) {
if (!fieldDescriptors.containsKey(entityClass)) {
throw new SiteException("No fields defined for class: " + entityClass.getCanonicalName());
}
return Collections.unmodifiableList(fieldDescriptors.get(entityClass));
}
/**
* Initialize field descriptors if not done yet.
*/
public static synchronized void initialize() {
if (initialized) {
return;
}
initialized = true;
SiteFields.add(Company.class, new FieldDescriptor("url", "Site URL", TextField.class, null, -1, null, String.class, "", false, true, true));
SiteFields.add(Company.class, new FieldDescriptor("host", "Host Name", TextField.class, null, 300, null, String.class, "", false, true, true));
SiteFields.add(Company.class, new FieldDescriptor("termsAndConditions", "Terms & Conditions", TextArea.class, null, 100, null, String.class, "", false,
true, false));
SiteFields.add(Company.class, new FieldDescriptor("companyName", "Company Name", TextField.class, null, -1, null, String.class, "", false, true, true));
SiteFields.add(Company.class, new FieldDescriptor("companyCode", "Company Code", TextField.class, null, 100, null, String.class, "", false, true, true));
SiteFields.add(Company.class, new FieldDescriptor("iban", "IBAN", TextField.class, null, 100, null, String.class, "", false, true, true));
SiteFields.add(Company.class, new FieldDescriptor("bic", "BIC", TextField.class, null, 100, null, String.class, "", false, true, true));
SiteFields.add(Company.class, new FieldDescriptor("phoneNumber", "Phone Number", TextField.class, null, 150, null, String.class, "", false, true, true));
SiteFields.add(Company.class, new FieldDescriptor("salesEmailAddress", "Sales Email Address", TextField.class, null, 150, null, String.class, "", false,
true, true), new EmailValidator("Email address is not valid."));
SiteFields.add(Company.class, new FieldDescriptor("supportEmailAddress", "Support Email Address", TextField.class, null, 150, null, String.class, "",
false, true, true), new EmailValidator("Email address is not valid."));
SiteFields.add(Company.class, new FieldDescriptor("invoicingEmailAddress", "Invoicing Email Address", TextField.class, null, 150, null, String.class, "",
false, true, true), new EmailValidator("Email address is not valid."));
SiteFields.add(Company.class, new FieldDescriptor("selfRegistration", "Self Registration", CheckBox.class, null, 100, null, Boolean.class, false, false, true, false));
SiteFields.add(Company.class, new FieldDescriptor("emailPasswordReset", "Email Password Reset", CheckBox.class, null, 100, null, Boolean.class, false, false, true, false));
SiteFields.add(Company.class, new FieldDescriptor("maxFailedLoginCount", "Max Failed Logins", TextField.class, new StringToIntegerConverter(), 50, null, Integer.class, null,
false, true, false).addValidator(new IntegerRangeValidator("Invalid value", 0, 10)));
SiteFields.add(Company.class, new FieldDescriptor("passwordValidityPeriodDays", "Password Validity Period", TextField.class, new StringToIntegerConverter(), 50, null, Integer.class, null,
false, true, true).addValidator(new IntegerRangeValidator("Invalid value", 0, 10)));
SiteFields.add(Company.class, new FieldDescriptor("openIdLogin", "Open ID Login", CheckBox.class, null, 100, null, Boolean.class, false, false, true, false));
SiteFields.add(Company.class, new FieldDescriptor("certificateLogin", "Certificate Login", CheckBox.class, null, 100, null, Boolean.class, false, false, true, false));
SiteFields.add(Company.class, new FieldDescriptor("oAuthLogin", "OAuth Login", CheckBox.class, null, 100, null, Boolean.class, false, false, true, false));
SiteFields.add(Company.class, new FieldDescriptor("oAuthSelfRegistration", "OAuth Self Registration", CheckBox.class, null, 100, null, Boolean.class, false, false, true, false));
SiteFields.add(Company.class, new FieldDescriptor("gitHubClientId", "GitHub Client ID", TextField.class, null, -1, null, String.class, "", false, true, false));
SiteFields.add(Company.class, new FieldDescriptor("gitHubClientSecret", "GitHub Client Secret", TextField.class, null, -1, null, String.class, "", false, true, false));
SiteFields.add(Company.class, new FieldDescriptor("gaTrackingId", "GA Tracking ID", TextField.class, null, 100, null, String.class, "", false, true, false));
SiteFields.add(Company.class, new FieldDescriptor("created", "Created", TimestampField.class, new TimestampConverter(), 150, null, Date.class, null, true,
true, true));
SiteFields.add(Company.class, new FieldDescriptor("modified", "Modified", TimestampField.class, new TimestampConverter(), 150, null, Date.class, null,
true, true, true));
SiteFields.add(Customer.class, new FieldDescriptor("firstName", "First Name", TextField.class, null, 150, null, String.class, "", false, true, true));
SiteFields.add(Customer.class, new FieldDescriptor("lastName", "Last Name", TextField.class, null, 150, null, String.class, "", false, true, true));
SiteFields.add(Customer.class, new FieldDescriptor("phoneNumber", "Phone Number", TextField.class, null, 100, null, String.class, "", false, true, true));
SiteFields.add(Customer.class, new FieldDescriptor("emailAddress", "Email Address", TextField.class, null, 150, null, String.class, "", false, true, true),
new EmailValidator("Email address is not valid."));
SiteFields.add(Customer.class, new FieldDescriptor("memberGroup", "Members", GroupField.class, null, 100, null, Group.class,
null, true, true, false));
SiteFields.add(Customer.class, new FieldDescriptor("adminGroup", "Admins", GroupField.class, null, 100, null, Group.class,
null, true, true, false));
SiteFields.add(Customer.class, new FieldDescriptor("company", "Is Company", CheckBox.class, null, 100, null, Boolean.class, false, false, true, false));
SiteFields.add(Customer.class, new FieldDescriptor("companyName", "Company Name", TextField.class, null, -1, null, String.class, "", false, true, false));
SiteFields.add(Customer.class, new FieldDescriptor("companyCode", "Company Code", TextField.class, null, 100, null, String.class, "", false, true, false));
SiteFields.add(Customer.class, new FieldDescriptor("created", "Created", TimestampField.class, new TimestampConverter(), 150, null, Date.class, null, true,
true, true));
SiteFields.add(Customer.class, new FieldDescriptor("modified", "Modified", TimestampField.class, new TimestampConverter(), 150, null, Date.class, null,
true, true, true));
SiteFields.add(PostalAddress.class, new FieldDescriptor("addressLineOne", "Line #1", TextField.class, null, 100, null, String.class, "",
false, true, true));
SiteFields.add(PostalAddress.class, new FieldDescriptor("addressLineTwo", "Line #2", TextField.class, null, 100, null, String.class, "",
false, true, true));
SiteFields.add(PostalAddress.class, new FieldDescriptor("addressLineThree", "Line #3", TextField.class, null, 100, null, String.class, "",
false, true, true));
SiteFields.add(PostalAddress.class, new FieldDescriptor("city", "City", TextField.class, null, 100, null, String.class, "",
false, true, true));
SiteFields.add(PostalAddress.class, new FieldDescriptor("postalCode", "Postal Code", TextField.class, null, 100, null, String.class, "",
false, true, true));
SiteFields.add(PostalAddress.class, new FieldDescriptor("country", "Country", TextField.class, null, 100, null, String.class, "",
false, true, true));
SiteFields.add(Group.class, new FieldDescriptor("name", "Name", TextField.class, null, 200, null, String.class, "", false, true, true));
SiteFields.add(Group.class, new FieldDescriptor("description", "Description", TextField.class, null, -1, null, String.class, "", false, true, true));
SiteFields.add(Group.class, new FieldDescriptor("created", "Created", TimestampField.class, new TimestampConverter(), 150, null, Date.class, null, true,
true, true));
SiteFields.add(Group.class, new FieldDescriptor("modified", "Modified", TimestampField.class, new TimestampConverter(), 150, null, Date.class, null,
true, true, true));
SiteFields.add(User.class, new FieldDescriptor("firstName", "First Name", TextField.class, null, 150, null, String.class, "", false, true, true));
SiteFields.add(User.class, new FieldDescriptor("lastName", "Last Name", TextField.class, null, 150, null, String.class, "", false, true, true));
SiteFields.add(User.class, new FieldDescriptor("emailAddress", "Email Address", TextField.class, null, -1, null, String.class, "", false, true, true), new EmailValidator("Email address is not valid."));
SiteFields.add(User.class, new FieldDescriptor("emailAddressValidated", "Email Validated", CheckBox.class, null, 100, null, Boolean.class, false, false, true, false));
SiteFields.add(User.class, new FieldDescriptor("passwordHash", "Password", PasswordField.class, null, 100, null, String.class, "", false, true, true));
SiteFields.add(User.class, new FieldDescriptor("passwordExpirationDate", "Password Expiration", DatePartField.class, new DatePartConverter(), 100, null, Date.class, null, true,
true, false));
SiteFields.add(User.class, new FieldDescriptor("phoneNumber", "Phone Number", TextField.class, null, 150, null, String.class, "", false, true, true));
SiteFields.add(User.class, new FieldDescriptor("lockedOut", "Locked Out", CheckBox.class, null, 100, null, Boolean.class, false, true, true, false));
SiteFields.add(User.class, new FieldDescriptor("failedLoginCount", "Failed Logins", TextField.class, new StringToIntegerConverter(), 50, null, Integer.class, null,
true, true, true));
SiteFields.add(User.class, new FieldDescriptor("openIdIdentifier", "Open ID Identifier", TextField.class, null, -1, null, String.class, "", false, true, false));
SiteFields.add(User.class, new FieldDescriptor("certificate", "Certificate (ASCII X.509)", TextArea.class, new CertificateConverter(), 200, null, String.class, "", false,
true, false));
SiteFields.add(User.class, new FieldDescriptor("created", "Created", TimestampField.class, new TimestampConverter(), 150, null, Date.class, null, true,
true, true));
SiteFields.add(User.class, new FieldDescriptor("modified", "Modified", TimestampField.class, new TimestampConverter(), 150, null, Date.class, null,
true, true, true));
SiteFields.add(GroupMember.class, new FieldDescriptor("group", "Group", GroupField.class, null, 100, null, Group.class,
null, false, true, true));
SiteFields.add(GroupMember.class, new FieldDescriptor("user", "User", UserField.class, null, 100, null, User.class,
null, false, true, true));
SiteFields.add(GroupMember.class, new FieldDescriptor("created", "Created", TimestampField.class, new TimestampConverter(), 150, null, Date.class, null, true,
true, true));
SiteFields.add(UserDirectory.class, new FieldDescriptor("address", "LDAP Address", TextField.class, null, -1, null, String.class, "", false, true, true));
SiteFields.add(UserDirectory.class, new FieldDescriptor("port", "LDAP Port", TextField.class, new StringToIntegerConverter(), 100, null, Integer.class, null,
false, true, true));
SiteFields.add(UserDirectory.class, new FieldDescriptor("loginDn", "LDAP Login DN", TextField.class, null, 100, null, String.class, "", false, true, true));
SiteFields.add(UserDirectory.class, new FieldDescriptor("loginPassword", "LDAP Login Password", PasswordField.class, null, 100, null, String.class, "", false, false, true));
SiteFields.add(UserDirectory.class, new FieldDescriptor("userEmailAttribute", "LDAP User Email Attribute", TextField.class, null, 100, null, String.class, "", false, true, true));
SiteFields.add(UserDirectory.class, new FieldDescriptor("userSearchBaseDn", "LDAP User search Base DN", TextField.class, null, 100, null, String.class, "", false, true, true));
SiteFields.add(UserDirectory.class, new FieldDescriptor("groupSearchBaseDn", "LDAP Group search Base DN", TextField.class, null, 100, null, String.class, "", false, true, true));
SiteFields.add(UserDirectory.class, new FieldDescriptor("remoteLocalGroupMapping", "Remote-Local Group Mapping", TextField.class, null, 200, null, String.class, "", false, true, true));
SiteFields.add(UserDirectory.class, new FieldDescriptor("requiredRemoteGroup", "Required Remote Group", TextField.class, null, 200, null, String.class, "", false, true, true));
SiteFields.add(UserDirectory.class, new FieldDescriptor("subNetWhiteList", "Sub Net White List", TextField.class, null, 200, null, String.class, "", false, true, true));
SiteFields.add(UserDirectory.class, new FieldDescriptor("enabled", "Enabled", CheckBox.class, null, 100, null, Boolean.class, false, false, true, false));
SiteFields.add(UserDirectory.class, new FieldDescriptor("created", "Created", TimestampField.class, new TimestampConverter(), 150, null, Date.class, null, true,
true, true));
SiteFields.add(UserDirectory.class, new FieldDescriptor("modified", "Modified", TimestampField.class, new TimestampConverter(), 150, null, Date.class, null,
true, true, true));
}
}