
com.liferay.dynamic.data.mapping.model.impl.DDMStructureImpl Maven / Gradle / Ivy
/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.dynamic.data.mapping.model.impl;
import com.liferay.dynamic.data.mapping.exception.StructureFieldException;
import com.liferay.dynamic.data.mapping.model.DDMForm;
import com.liferay.dynamic.data.mapping.model.DDMFormField;
import com.liferay.dynamic.data.mapping.model.DDMFormLayout;
import com.liferay.dynamic.data.mapping.model.DDMStructure;
import com.liferay.dynamic.data.mapping.model.DDMStructureLayout;
import com.liferay.dynamic.data.mapping.model.DDMStructureVersion;
import com.liferay.dynamic.data.mapping.model.DDMTemplate;
import com.liferay.dynamic.data.mapping.model.LocalizedValue;
import com.liferay.dynamic.data.mapping.service.DDMStructureLayoutLocalServiceUtil;
import com.liferay.dynamic.data.mapping.service.DDMStructureLocalServiceUtil;
import com.liferay.dynamic.data.mapping.service.DDMStructureVersionLocalServiceUtil;
import com.liferay.dynamic.data.mapping.service.DDMTemplateLocalServiceUtil;
import com.liferay.portal.kernel.bean.BeanPropertiesUtil;
import com.liferay.portal.kernel.exception.LocaleException;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.model.CacheField;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.service.GroupLocalServiceUtil;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.ListUtil;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.PredicateFilter;
import com.liferay.portal.kernel.util.SetUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.util.PropsValues;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
/**
* @author Brian Wing Shun Chan
*/
public class DDMStructureImpl extends DDMStructureBaseImpl {
@Override
public DDMForm createFullHierarchyDDMForm() throws PortalException {
DDMForm fullHierarchyDDMForm = getDDMForm();
DDMStructure parentDDMStructure = getParentDDMStructure();
if (parentDDMStructure != null) {
DDMForm ancestorsDDMForm =
parentDDMStructure.createFullHierarchyDDMForm();
List ddmFormFields =
fullHierarchyDDMForm.getDDMFormFields();
ddmFormFields.addAll(ancestorsDDMForm.getDDMFormFields());
}
return fullHierarchyDDMForm;
}
@Override
public String[] getAvailableLanguageIds() {
DDMForm ddmForm = getDDMForm();
Set availableLocales = ddmForm.getAvailableLocales();
return LocaleUtil.toLanguageIds(
availableLocales.toArray(new Locale[availableLocales.size()]));
}
@Override
public List getChildrenFieldNames(String fieldName)
throws PortalException {
DDMFormField ddmFormField = getDDMFormField(fieldName);
return getDDMFormFieldNames(ddmFormField.getNestedDDMFormFields());
}
@Override
public DDMForm getDDMForm() {
if (_ddmForm == null) {
try {
_ddmForm = DDMStructureLocalServiceUtil.getStructureDDMForm(
this);
}
catch (Exception e) {
_log.error(e, e);
return new DDMForm();
}
}
return new DDMForm(_ddmForm);
}
@Override
public DDMFormField getDDMFormField(String fieldName)
throws PortalException {
Map ddmFormFieldsMap =
getFullHierarchyDDMFormFieldsMap(true);
DDMFormField ddmFormField = ddmFormFieldsMap.get(fieldName);
if (ddmFormField == null) {
throw new StructureFieldException(
"Unable to find field " + fieldName);
}
return ddmFormField;
}
@Override
public List getDDMFormFields(boolean includeTransientFields) {
Map ddmFormFieldsMap =
getFullHierarchyDDMFormFieldsMap(true);
List ddmFormFields = new ArrayList<>(
ddmFormFieldsMap.values());
if (includeTransientFields) {
return ddmFormFields;
}
return filterTransientDDMFormFields(ddmFormFields);
}
@Override
public DDMFormLayout getDDMFormLayout() throws PortalException {
DDMStructureVersion structureVersion = getStructureVersion();
DDMStructureLayout ddmStructureLayout =
DDMStructureLayoutLocalServiceUtil.
getStructureLayoutByStructureVersionId(
structureVersion.getStructureVersionId());
return ddmStructureLayout.getDDMFormLayout();
}
@Override
public String getDefaultLanguageId() {
DDMForm ddmForm = getDDMForm();
return LocaleUtil.toLanguageId(ddmForm.getDefaultLocale());
}
@Override
public String getFieldDataType(String fieldName) throws PortalException {
DDMFormField ddmFormField = getDDMFormField(fieldName);
return ddmFormField.getDataType();
}
@Override
public String getFieldLabel(String fieldName, Locale locale)
throws PortalException {
DDMFormField ddmFormField = getDDMFormField(fieldName);
LocalizedValue label = ddmFormField.getLabel();
return label.getString(locale);
}
@Override
public String getFieldLabel(String fieldName, String locale)
throws PortalException {
return getFieldLabel(fieldName, LocaleUtil.fromLanguageId(locale));
}
@Override
public Set getFieldNames() {
List ddmFormFields = getDDMFormFields(false);
List ddmFormFieldNames = getDDMFormFieldNames(ddmFormFields);
return SetUtil.fromList(ddmFormFieldNames);
}
@Override
public String getFieldProperty(String fieldName, String property)
throws PortalException {
DDMFormField ddmFormField = getDDMFormField(fieldName);
return BeanPropertiesUtil.getString(ddmFormField, property);
}
@Override
public boolean getFieldRepeatable(String fieldName) throws PortalException {
DDMFormField ddmFormField = getDDMFormField(fieldName);
return ddmFormField.isRepeatable();
}
@Override
public boolean getFieldRequired(String fieldName) throws PortalException {
DDMFormField ddmFormField = getDDMFormField(fieldName);
return ddmFormField.isRequired();
}
@Override
public String getFieldTip(String fieldName, Locale locale)
throws PortalException {
DDMFormField ddmFormField = getDDMFormField(fieldName);
LocalizedValue tip = ddmFormField.getTip();
return tip.getString(locale);
}
@Override
public String getFieldTip(String fieldName, String locale)
throws PortalException {
return getFieldTip(fieldName, LocaleUtil.fromLanguageId(locale));
}
@Override
public String getFieldType(String fieldName) throws PortalException {
DDMFormField ddmFormField = getDDMFormField(fieldName);
return ddmFormField.getType();
}
@Override
public DDMForm getFullHierarchyDDMForm() {
try {
DDMForm fullHierarchyDDMForm = createFullHierarchyDDMForm();
return new DDMForm(fullHierarchyDDMForm);
}
catch (Exception e) {
_log.error(e, e);
}
return new DDMForm();
}
@Override
public Map getFullHierarchyDDMFormFieldsMap(
boolean includeNestedDDMFormFields) {
DDMForm ddmForm = getFullHierarchyDDMForm();
return ddmForm.getDDMFormFieldsMap(includeNestedDDMFormFields);
}
@Override
public DDMStructureVersion getLatestStructureVersion()
throws PortalException {
return DDMStructureVersionLocalServiceUtil.getLatestStructureVersion(
getStructureId());
}
@Override
public List getRootFieldNames() {
DDMForm ddmForm = getFullHierarchyDDMForm();
return getDDMFormFieldNames(ddmForm.getDDMFormFields());
}
@Override
public DDMStructureVersion getStructureVersion() throws PortalException {
return DDMStructureVersionLocalServiceUtil.getStructureVersion(
getStructureId(), getVersion());
}
@Override
public List getTemplates() {
return DDMTemplateLocalServiceUtil.getTemplates(getStructureId());
}
@Override
public String getUnambiguousName(
List structures, long groupId, final Locale locale)
throws PortalException {
if (getGroupId() == groupId) {
return getName(locale);
}
boolean hasAmbiguousName = ListUtil.exists(
structures,
new PredicateFilter() {
@Override
public boolean filter(DDMStructure structure) {
String name = structure.getName(locale);
if (name.equals(getName(locale)) &&
(structure.getStructureId() != getStructureId())) {
return true;
}
return false;
}
});
if (hasAmbiguousName) {
Group group = GroupLocalServiceUtil.getGroup(getGroupId());
return group.getUnambiguousName(getName(locale), locale);
}
return getName(locale);
}
/**
* Returns the WebDAV URL to access the structure.
*
* @param themeDisplay the theme display needed to build the URL. It can
* set HTTPS access, the server name, the server port, the path
* context, and the scope group.
* @param webDAVToken the WebDAV token for the URL
* @return the WebDAV URL
*/
@Override
public String getWebDavURL(ThemeDisplay themeDisplay, String webDAVToken) {
StringBundler sb = new StringBundler(11);
boolean secure = false;
if (themeDisplay.isSecure() ||
PropsValues.WEBDAV_SERVLET_HTTPS_REQUIRED) {
secure = true;
}
String portalURL = PortalUtil.getPortalURL(
themeDisplay.getServerName(), themeDisplay.getServerPort(), secure);
sb.append(portalURL);
sb.append(themeDisplay.getPathContext());
sb.append(StringPool.SLASH);
sb.append("webdav");
Group group = themeDisplay.getScopeGroup();
sb.append(group.getFriendlyURL());
sb.append(StringPool.SLASH);
sb.append(webDAVToken);
sb.append(StringPool.SLASH);
sb.append("Structures");
sb.append(StringPool.SLASH);
sb.append(getStructureId());
return sb.toString();
}
@Override
public boolean hasField(String fieldName) {
Map ddmFormFieldsMap =
getFullHierarchyDDMFormFieldsMap(true);
return ddmFormFieldsMap.containsKey(fieldName);
}
@Override
public boolean isFieldRepeatable(String fieldName) throws PortalException {
DDMFormField ddmFormField = getDDMFormField(fieldName);
return ddmFormField.isRepeatable();
}
@Override
public boolean isFieldTransient(String fieldName) throws PortalException {
DDMFormField ddmFormField = getDDMFormField(fieldName);
if (Validator.isNull(ddmFormField.getDataType())) {
return true;
}
return false;
}
@Override
public void prepareLocalizedFieldsForImport(Locale defaultImportLocale)
throws LocaleException {
super.prepareLocalizedFieldsForImport(defaultImportLocale);
try {
setDefinition(
DDMStructureLocalServiceUtil.
prepareLocalizedDefinitionForImport(
this, defaultImportLocale));
}
catch (Exception e) {
throw new LocaleException(LocaleException.TYPE_EXPORT_IMPORT, e);
}
}
@Override
public void setDDMForm(DDMForm ddmForm) {
_ddmForm = ddmForm;
}
@Override
public void setDefinition(String definition) {
super.setDefinition(definition);
_ddmForm = null;
}
protected List filterTransientDDMFormFields(
List ddmFormFields) {
PredicateFilter predicateFilter =
new PredicateFilter() {
@Override
public boolean filter(DDMFormField ddmFormField) {
if (Validator.isNull(ddmFormField.getDataType())) {
return false;
}
return true;
}
};
return ListUtil.filter(ddmFormFields, predicateFilter);
}
protected List getDDMFormFieldNames(
List ddmFormFields) {
List fieldNames = new ArrayList<>();
for (DDMFormField ddmFormField : ddmFormFields) {
fieldNames.add(ddmFormField.getName());
}
return fieldNames;
}
protected DDMStructure getParentDDMStructure() throws PortalException {
if (getParentStructureId() == 0) {
return null;
}
DDMStructure parentStructure =
DDMStructureLocalServiceUtil.getStructure(getParentStructureId());
return parentStructure;
}
private static final Log _log = LogFactoryUtil.getLog(
DDMStructureImpl.class);
@CacheField(methodName = "DDMForm")
private DDMForm _ddmForm;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy