/** * 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.document.library.google.docs.internal.util; import com.liferay.document.library.kernel.model.DLFileEntryMetadata; import com.liferay.document.library.kernel.model.DLFileEntryType; import com.liferay.document.library.kernel.service.DLFileEntryTypeLocalService; import com.liferay.dynamic.data.mapping.io.DDMFormXSDDeserializer; import com.liferay.dynamic.data.mapping.model.DDMForm; import com.liferay.dynamic.data.mapping.model.DDMFormLayout; import com.liferay.dynamic.data.mapping.model.DDMStructure; import com.liferay.dynamic.data.mapping.model.DDMStructureConstants; import com.liferay.dynamic.data.mapping.service.DDMStructureLocalService; import com.liferay.dynamic.data.mapping.storage.StorageType; import com.liferay.dynamic.data.mapping.util.DDM; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.model.Company; import com.liferay.portal.kernel.service.ClassNameLocalService; import com.liferay.portal.kernel.service.ServiceContext; import com.liferay.portal.kernel.service.UserLocalService; import com.liferay.portal.kernel.util.LocaleUtil; import com.liferay.portal.kernel.util.StringUtil; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; /** * @author Iván Zaera */ public class GoogleDocsDLFileEntryTypeHelper { public GoogleDocsDLFileEntryTypeHelper( Company company, ClassNameLocalService classNameLocalService, DDM ddm, DDMFormXSDDeserializer ddmFormXSDDeserializer, DDMStructureLocalService ddmStructureLocalService, DLFileEntryTypeLocalService dlFileEntryTypeLocalService, UserLocalService userLocalService) { _company = company; _classNameLocalService = classNameLocalService; _ddm = ddm; _ddmFormXSDDeserializer = ddmFormXSDDeserializer; _ddmStructureLocalService = ddmStructureLocalService; _dlFileEntryTypeLocalService = dlFileEntryTypeLocalService; _userLocalService = userLocalService; _dlFileEntryMetadataClassNameId = _classNameLocalService.getClassNameId( DLFileEntryMetadata.class); } public DDMStructure addGoogleDocsDDMStructure() throws PortalException { long defaultUserId = _userLocalService.getDefaultUserId( _company.getCompanyId()); Map<Locale, String> nameMap = new HashMap<>(); Map<Locale, String> descriptionMap = new HashMap<>(); for (Locale curLocale : LanguageUtil.getAvailableLocales(_company.getCompanyId())) { nameMap.put(curLocale, "Google Docs Metadata"); descriptionMap.put(curLocale, "Google Docs Metadata"); } String definition = null; try { definition = StringUtil.read( GoogleDocsDLFileEntryTypeHelper.class.getResourceAsStream( "dependencies/ddm_structure_google_docs.xml")); } catch (IOException ioe) { throw new PortalException(ioe); } DDMForm ddmForm = _ddmFormXSDDeserializer.deserialize(definition); DDMFormLayout ddmFormLayout = _ddm.getDefaultDDMFormLayout(ddmForm); ServiceContext serviceContext = new ServiceContext(); serviceContext.setAddGuestPermissions(true); serviceContext.setAddGroupPermissions(true); serviceContext.setScopeGroupId(_company.getGroupId()); serviceContext.setUserId(defaultUserId); return _ddmStructureLocalService.addStructure( defaultUserId, _company.getGroupId(), DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID, _dlFileEntryMetadataClassNameId, GoogleDocsConstants.DDM_STRUCTURE_KEY_GOOGLE_DOCS, nameMap, descriptionMap, ddmForm, ddmFormLayout, StorageType.JSON.toString(), DDMStructureConstants.TYPE_DEFAULT, serviceContext); } public DLFileEntryType addGoogleDocsDLFileEntryType() throws PortalException { DDMStructure ddmStructure = _ddmStructureLocalService.fetchStructure( _company.getGroupId(), _dlFileEntryMetadataClassNameId, GoogleDocsConstants.DDM_STRUCTURE_KEY_GOOGLE_DOCS); if (ddmStructure == null) { ddmStructure = addGoogleDocsDDMStructure(); } List<DLFileEntryType> dlFileEntryTypes = _dlFileEntryTypeLocalService.getFileEntryTypes( ddmStructure.getStructureId()); if (!dlFileEntryTypes.isEmpty()) { return dlFileEntryTypes.get(0); } return addGoogleDocsDLFileEntryType(ddmStructure.getStructureId()); } protected DLFileEntryType addGoogleDocsDLFileEntryType(long ddmStructureId) throws PortalException { long defaultUserId = _userLocalService.getDefaultUserId( _company.getCompanyId()); Map<Locale, String> nameMap = new HashMap<>(); nameMap.put(LocaleUtil.getDefault(), "Google Docs"); Map<Locale, String> descriptionMap = new HashMap<>(); descriptionMap.put(LocaleUtil.getDefault(), "Google Docs"); ServiceContext serviceContext = new ServiceContext(); serviceContext.setAddGuestPermissions(true); serviceContext.setAddGroupPermissions(true); serviceContext.setScopeGroupId(_company.getGroupId()); serviceContext.setUserId(defaultUserId); return _dlFileEntryTypeLocalService.addFileEntryType( defaultUserId, _company.getGroupId(), GoogleDocsConstants.DL_FILE_ENTRY_TYPE_KEY, nameMap, descriptionMap, new long[] {ddmStructureId}, serviceContext); } private final ClassNameLocalService _classNameLocalService; private final Company _company; private final DDM _ddm; private final DDMFormXSDDeserializer _ddmFormXSDDeserializer; private final DDMStructureLocalService _ddmStructureLocalService; private final long _dlFileEntryMetadataClassNameId; private final DLFileEntryTypeLocalService _dlFileEntryTypeLocalService; private final UserLocalService _userLocalService; }