001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.documentlibrary.service.impl;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.kernel.util.ArrayUtil;
020    import com.liferay.portal.kernel.util.LocaleUtil;
021    import com.liferay.portal.kernel.util.LocalizationUtil;
022    import com.liferay.portal.kernel.util.OrderByComparator;
023    import com.liferay.portal.kernel.util.ParamUtil;
024    import com.liferay.portal.kernel.util.SortedArrayList;
025    import com.liferay.portal.kernel.util.Validator;
026    import com.liferay.portal.kernel.uuid.PortalUUIDUtil;
027    import com.liferay.portal.model.User;
028    import com.liferay.portal.service.ServiceContext;
029    import com.liferay.portal.util.PortalUtil;
030    import com.liferay.portlet.documentlibrary.DuplicateFileEntryTypeException;
031    import com.liferay.portlet.documentlibrary.NoSuchFolderException;
032    import com.liferay.portlet.documentlibrary.NoSuchMetadataSetException;
033    import com.liferay.portlet.documentlibrary.model.DLFileEntry;
034    import com.liferay.portlet.documentlibrary.model.DLFileEntryMetadata;
035    import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
036    import com.liferay.portlet.documentlibrary.model.DLFileEntryTypeConstants;
037    import com.liferay.portlet.documentlibrary.model.DLFileVersion;
038    import com.liferay.portlet.documentlibrary.model.DLFolder;
039    import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
040    import com.liferay.portlet.documentlibrary.service.base.DLFileEntryTypeLocalServiceBaseImpl;
041    import com.liferay.portlet.documentlibrary.util.DLUtil;
042    import com.liferay.portlet.dynamicdatamapping.StructureXsdException;
043    import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
044    import com.liferay.portlet.dynamicdatamapping.model.DDMStructureConstants;
045    
046    import java.util.ArrayList;
047    import java.util.Date;
048    import java.util.HashMap;
049    import java.util.List;
050    import java.util.Locale;
051    import java.util.Map;
052    
053    /**
054     * @author Alexander Chow
055     * @author Sergio Gonz??lez
056     */
057    public class DLFileEntryTypeLocalServiceImpl
058            extends DLFileEntryTypeLocalServiceBaseImpl {
059    
060            @Override
061            public DLFileEntryType addFileEntryType(
062                            long userId, long groupId, String name, String description,
063                            long[] ddmStructureIds, ServiceContext serviceContext)
064                    throws PortalException, SystemException {
065    
066                    User user = userPersistence.findByPrimaryKey(userId);
067    
068                    String fileEntryTypeUuid = serviceContext.getUuid();
069    
070                    if (Validator.isNull(fileEntryTypeUuid)) {
071                            fileEntryTypeUuid = PortalUUIDUtil.generate();
072                    }
073    
074                    long fileEntryTypeId = counterLocalService.increment();
075    
076                    long ddmStructureId = updateDDMStructure(
077                            userId, fileEntryTypeUuid, fileEntryTypeId, groupId, name,
078                            description, serviceContext);
079    
080                    if (ddmStructureId > 0) {
081                            ddmStructureIds = ArrayUtil.append(ddmStructureIds, ddmStructureId);
082                    }
083    
084                    Date now = new Date();
085    
086                    validate(fileEntryTypeId, groupId, name, ddmStructureIds);
087    
088                    DLFileEntryType dlFileEntryType = dlFileEntryTypePersistence.create(
089                            fileEntryTypeId);
090    
091                    dlFileEntryType.setUuid(fileEntryTypeUuid);
092                    dlFileEntryType.setGroupId(groupId);
093                    dlFileEntryType.setCompanyId(user.getCompanyId());
094                    dlFileEntryType.setUserId(user.getUserId());
095                    dlFileEntryType.setUserName(user.getFullName());
096                    dlFileEntryType.setCreateDate(serviceContext.getCreateDate(now));
097                    dlFileEntryType.setModifiedDate(serviceContext.getModifiedDate(now));
098                    dlFileEntryType.setName(name);
099                    dlFileEntryType.setDescription(description);
100    
101                    dlFileEntryTypePersistence.update(dlFileEntryType, false);
102    
103                    dlFileEntryTypePersistence.addDDMStructures(
104                            fileEntryTypeId, ddmStructureIds);
105    
106                    if (serviceContext.isAddGroupPermissions() ||
107                            serviceContext.isAddGuestPermissions()) {
108    
109                            addFileEntryTypeResources(
110                                    dlFileEntryType, serviceContext.isAddGroupPermissions(),
111                                    serviceContext.isAddGuestPermissions());
112                    }
113                    else {
114                            addFileEntryTypeResources(
115                                    dlFileEntryType, serviceContext.getGroupPermissions(),
116                                    serviceContext.getGuestPermissions());
117                    }
118    
119                    return dlFileEntryType;
120            }
121    
122            @Override
123            public void cascadeFileEntryTypes(long userId, DLFolder dlFolder)
124                    throws PortalException, SystemException {
125    
126                    List<DLFileEntryType> dlFileEntryTypes = getFolderFileEntryTypes(
127                            new long[] {dlFolder.getGroupId()}, dlFolder.getFolderId(), true);
128    
129                    List<Long> fileEntryTypeIds = getFileEntryTypeIds(dlFileEntryTypes);
130    
131                    long defaultFileEntryTypeId = getDefaultFileEntryTypeId(
132                            dlFolder.getFolderId());
133    
134                    ServiceContext serviceContext = new ServiceContext();
135    
136                    serviceContext.setCompanyId(dlFolder.getCompanyId());
137                    serviceContext.setScopeGroupId(dlFolder.getGroupId());
138                    serviceContext.setUserId(userId);
139    
140                    cascadeFileEntryTypes(
141                            dlFolder.getGroupId(), dlFolder.getFolderId(),
142                            defaultFileEntryTypeId, fileEntryTypeIds, serviceContext);
143            }
144    
145            @Override
146            public void deleteFileEntryType(DLFileEntryType dlFileEntryType)
147                    throws PortalException, SystemException {
148    
149                    DDMStructure ddmStructure = ddmStructureLocalService.fetchStructure(
150                            dlFileEntryType.getGroupId(),
151                            DLUtil.getDDMStructureKey(dlFileEntryType));
152    
153                    if (ddmStructure == null) {
154                            ddmStructure = ddmStructureLocalService.fetchStructure(
155                                    dlFileEntryType.getGroupId(),
156                                    DLUtil.getDeprecatedDDMStructureKey(dlFileEntryType));
157                    }
158    
159                    if (ddmStructure != null) {
160                            ddmStructureLocalService.deleteStructure(
161                                    ddmStructure.getStructureId());
162                    }
163    
164                    dlFileEntryTypePersistence.remove(dlFileEntryType);
165            }
166    
167            @Override
168            public void deleteFileEntryType(long fileEntryTypeId)
169                    throws PortalException, SystemException {
170    
171                    DLFileEntryType dlFileEntryType =
172                            dlFileEntryTypePersistence.findByPrimaryKey(fileEntryTypeId);
173    
174                    deleteFileEntryType(dlFileEntryType);
175            }
176    
177            @Override
178            public void deleteFileEntryTypes(long groupId)
179                    throws PortalException, SystemException {
180    
181                    List<DLFileEntryType> dlFileEntryTypes =
182                            dlFileEntryTypePersistence.findByGroupId(groupId);
183    
184                    for (DLFileEntryType dlFileEntryType : dlFileEntryTypes) {
185                            deleteFileEntryType(dlFileEntryType);
186                    }
187            }
188    
189            @Override
190            public DLFileEntryType fetchFileEntryType(long fileEntryTypeId)
191                    throws SystemException {
192    
193                    return dlFileEntryTypePersistence.fetchByPrimaryKey(fileEntryTypeId);
194            }
195    
196            @Override
197            public long getDefaultFileEntryTypeId(long folderId)
198                    throws PortalException, SystemException {
199    
200                    folderId = getFileEntryTypesPrimaryFolderId(folderId);
201    
202                    if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
203                            DLFolder dlFolder = dlFolderPersistence.findByPrimaryKey(folderId);
204    
205                            return dlFolder.getDefaultFileEntryTypeId();
206                    }
207                    else {
208                            return 0;
209                    }
210            }
211    
212            @Override
213            public DLFileEntryType getFileEntryType(long fileEntryTypeId)
214                    throws PortalException, SystemException {
215    
216                    return dlFileEntryTypePersistence.findByPrimaryKey(fileEntryTypeId);
217            }
218    
219            @Override
220            public DLFileEntryType getFileEntryType(long groupId, String name)
221                    throws PortalException, SystemException {
222    
223                    return dlFileEntryTypePersistence.findByG_N(groupId, name);
224            }
225    
226            @Override
227            public List<DLFileEntryType> getFileEntryTypes(long[] groupIds)
228                    throws SystemException {
229    
230                    return dlFileEntryTypePersistence.findByGroupId(groupIds);
231            }
232    
233            @Override
234            public List<DLFileEntryType> getFolderFileEntryTypes(
235                            long[] groupIds, long folderId, boolean inherited)
236                    throws PortalException, SystemException {
237    
238                    if (!inherited) {
239                            return dlFolderPersistence.getDLFileEntryTypes(folderId);
240                    }
241    
242                    List<DLFileEntryType> dlFileEntryTypes = null;
243    
244                    folderId = getFileEntryTypesPrimaryFolderId(folderId);
245    
246                    if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
247                            dlFileEntryTypes = dlFolderPersistence.getDLFileEntryTypes(
248                                    folderId);
249                    }
250    
251                    if ((dlFileEntryTypes == null) || dlFileEntryTypes.isEmpty()) {
252                            dlFileEntryTypes = new ArrayList<DLFileEntryType>(
253                                    getFileEntryTypes(groupIds));
254    
255                            DLFileEntryType dlFileEntryType =
256                                    dlFileEntryTypePersistence.fetchByPrimaryKey(
257                                            DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_BASIC_DOCUMENT);
258    
259                            dlFileEntryTypes.add(0, dlFileEntryType);
260                    }
261    
262                    return dlFileEntryTypes;
263            }
264    
265            @Override
266            public List<DLFileEntryType> search(
267                            long companyId, long[] groupIds, String keywords,
268                            boolean includeBasicFileEntryType, int start, int end,
269                            OrderByComparator orderByComparator)
270                    throws SystemException {
271    
272                    return dlFileEntryTypeFinder.findByKeywords(
273                            companyId, groupIds, keywords, includeBasicFileEntryType, start,
274                            end, orderByComparator);
275            }
276    
277            @Override
278            public int searchCount(
279                            long companyId, long[] groupIds, String keywords,
280                            boolean includeBasicFileEntryType)
281                    throws SystemException {
282    
283                    return dlFileEntryTypeFinder.countByKeywords(
284                            companyId, groupIds, keywords, includeBasicFileEntryType);
285            }
286    
287            @Override
288            public void unsetFolderFileEntryTypes(long folderId)
289                    throws SystemException {
290    
291                    List<DLFileEntryType> dlFileEntryTypes =
292                            dlFolderPersistence.getDLFileEntryTypes(folderId);
293    
294                    for (DLFileEntryType dlFileEntryType : dlFileEntryTypes) {
295                            dlFolderPersistence.removeDLFileEntryType(
296                                    folderId, dlFileEntryType);
297                    }
298            }
299    
300            @Override
301            public DLFileEntry updateFileEntryFileEntryType(
302                            DLFileEntry dlFileEntry, ServiceContext serviceContext)
303                    throws PortalException, SystemException {
304    
305                    long groupId = serviceContext.getScopeGroupId();
306                    long folderId = DLFolderConstants.DEFAULT_PARENT_FOLDER_ID;
307    
308                    DLFolder dlFolder = dlFolderPersistence.fetchByPrimaryKey(
309                            dlFileEntry.getFolderId());
310    
311                    if (dlFolder != null) {
312                            groupId = dlFolder.getGroupId();
313                            folderId = dlFolder.getFolderId();
314                    }
315    
316                    List<DLFileEntryType> dlFileEntryTypes = getFolderFileEntryTypes(
317                            DLUtil.getGroupIds(groupId), folderId, true);
318    
319                    List<Long> fileEntryTypeIds = getFileEntryTypeIds(dlFileEntryTypes);
320    
321                    if (fileEntryTypeIds.contains(dlFileEntry.getFileEntryTypeId())) {
322                            return dlFileEntry;
323                    }
324    
325                    long defaultFileEntryTypeId = getDefaultFileEntryTypeId(folderId);
326    
327                    DLFileVersion dlFileVersion =
328                            dlFileVersionLocalService.getLatestFileVersion(
329                                    dlFileEntry.getFileEntryId(), true);
330    
331                    if (dlFileVersion.isPending()) {
332                            workflowInstanceLinkLocalService.deleteWorkflowInstanceLink(
333                                    dlFileVersion.getCompanyId(), dlFileEntry.getGroupId(),
334                                    DLFileEntry.class.getName(), dlFileVersion.getFileVersionId());
335                    }
336    
337                    return dlFileEntryLocalService.updateFileEntry(
338                            serviceContext.getUserId(), dlFileEntry.getFileEntryId(), null,
339                            null, null, null, null, false, defaultFileEntryTypeId, null, null,
340                            null, 0, serviceContext);
341            }
342    
343            @Override
344            public void updateFileEntryType(
345                            long userId, long fileEntryTypeId, String name, String description,
346                            long[] ddmStructureIds, ServiceContext serviceContext)
347                    throws PortalException, SystemException {
348    
349                    DLFileEntryType dlFileEntryType =
350                            dlFileEntryTypePersistence.findByPrimaryKey(fileEntryTypeId);
351    
352                    long ddmStructureId = updateDDMStructure(
353                            userId, dlFileEntryType.getUuid(), fileEntryTypeId,
354                            dlFileEntryType.getGroupId(), name, description, serviceContext);
355    
356                    if (ddmStructureId > 0) {
357                            ddmStructureIds = ArrayUtil.append(ddmStructureIds, ddmStructureId);
358                    }
359    
360                    validate(
361                            fileEntryTypeId, dlFileEntryType.getGroupId(), name,
362                            ddmStructureIds);
363    
364                    dlFileEntryType.setModifiedDate(serviceContext.getModifiedDate(null));
365                    dlFileEntryType.setName(name);
366                    dlFileEntryType.setDescription(description);
367    
368                    dlFileEntryTypePersistence.update(dlFileEntryType, false);
369    
370                    dlFileEntryTypePersistence.setDDMStructures(
371                            fileEntryTypeId, ddmStructureIds);
372            }
373    
374            @Override
375            public void updateFolderFileEntryTypes(
376                            DLFolder dlFolder, List<Long> fileEntryTypeIds,
377                            long defaultFileEntryTypeId, ServiceContext serviceContext)
378                    throws PortalException, SystemException {
379    
380                    List<Long> originalFileEntryTypeIds = getFileEntryTypeIds(
381                            dlFolderPersistence.getDLFileEntryTypes(dlFolder.getFolderId()));
382    
383                    if (fileEntryTypeIds.equals(originalFileEntryTypeIds)) {
384                            return;
385                    }
386    
387                    for (Long fileEntryTypeId : fileEntryTypeIds) {
388                            if (!originalFileEntryTypeIds.contains(fileEntryTypeId)) {
389                                    dlFolderPersistence.addDLFileEntryType(
390                                            dlFolder.getFolderId(), fileEntryTypeId);
391                            }
392                    }
393    
394                    for (Long originalFileEntryTypeId : originalFileEntryTypeIds) {
395                            if (!fileEntryTypeIds.contains(originalFileEntryTypeId)) {
396                                    dlFolderPersistence.removeDLFileEntryType(
397                                            dlFolder.getFolderId(), originalFileEntryTypeId);
398    
399                                    workflowDefinitionLinkLocalService.deleteWorkflowDefinitionLink(
400                                            dlFolder.getCompanyId(), dlFolder.getGroupId(),
401                                            DLFolder.class.getName(), dlFolder.getFolderId(),
402                                            originalFileEntryTypeId);
403                            }
404                    }
405            }
406    
407            protected void addFileEntryTypeResources(
408                            DLFileEntryType dlFileEntryType, boolean addGroupPermissions,
409                            boolean addGuestPermissions)
410                    throws PortalException, SystemException {
411    
412                    resourceLocalService.addResources(
413                            dlFileEntryType.getCompanyId(), dlFileEntryType.getGroupId(),
414                            dlFileEntryType.getUserId(), DLFileEntryType.class.getName(),
415                            dlFileEntryType.getFileEntryTypeId(), false, addGroupPermissions,
416                            addGuestPermissions);
417            }
418    
419            protected void addFileEntryTypeResources(
420                            DLFileEntryType dlFileEntryType, String[] groupPermissions,
421                            String[] guestPermissions)
422                    throws PortalException, SystemException {
423    
424                    resourceLocalService.addModelResources(
425                            dlFileEntryType.getCompanyId(), dlFileEntryType.getGroupId(),
426                            dlFileEntryType.getUserId(), DLFileEntryType.class.getName(),
427                            dlFileEntryType.getFileEntryTypeId(), groupPermissions,
428                            guestPermissions);
429            }
430    
431            protected void cascadeFileEntryTypes(
432                            long groupId, long folderId, long defaultFileEntryTypeId,
433                            List<Long> fileEntryTypeIds, ServiceContext serviceContext)
434                    throws PortalException, SystemException {
435    
436                    List<DLFileEntry> dlFileEntries = dlFileEntryPersistence.findByG_F(
437                            groupId, folderId);
438    
439                    for (DLFileEntry dlFileEntry : dlFileEntries) {
440                            Long fileEntryTypeId = dlFileEntry.getFileEntryTypeId();
441    
442                            if (fileEntryTypeIds.contains(fileEntryTypeId)) {
443                                    continue;
444                            }
445    
446                            DLFileVersion dlFileVersion =
447                                    dlFileVersionLocalService.getLatestFileVersion(
448                                            dlFileEntry.getFileEntryId(), true);
449    
450                            if (dlFileVersion.isPending()) {
451                                    workflowInstanceLinkLocalService.deleteWorkflowInstanceLink(
452                                            dlFileVersion.getCompanyId(), groupId,
453                                            DLFileEntry.class.getName(),
454                                            dlFileVersion.getFileVersionId());
455                            }
456    
457                            dlFileEntryService.updateFileEntry(
458                                    dlFileEntry.getFileEntryId(), null, null, null, null, null,
459                                    false, defaultFileEntryTypeId, null, null, null, 0,
460                                    serviceContext);
461                    }
462    
463                    List<DLFolder> subFolders = dlFolderPersistence.findByG_P_M(
464                            groupId, folderId, false);
465    
466                    for (DLFolder subFolder : subFolders) {
467                            long subFolderId = subFolder.getFolderId();
468    
469                            if (subFolder.isOverrideFileEntryTypes()) {
470                                    continue;
471                            }
472    
473                            cascadeFileEntryTypes(
474                                    groupId, subFolderId, defaultFileEntryTypeId, fileEntryTypeIds,
475                                    serviceContext);
476                    }
477            }
478    
479            protected void fixDDMStructureKey(
480                            String fileEntryTypeUuid, long fileEntryTypeId, long groupId)
481                    throws SystemException {
482    
483                    DDMStructure ddmStructure = ddmStructureLocalService.fetchStructure(
484                            groupId, DLUtil.getDeprecatedDDMStructureKey(fileEntryTypeId));
485    
486                    if (ddmStructure != null) {
487                            ddmStructure.setStructureKey(
488                                    DLUtil.getDDMStructureKey(fileEntryTypeUuid));
489    
490                            ddmStructureLocalService.updateDDMStructure(ddmStructure);
491                    }
492            }
493    
494            protected List<Long> getFileEntryTypeIds(
495                    List<DLFileEntryType> dlFileEntryTypes) {
496    
497                    List<Long> fileEntryTypeIds = new SortedArrayList<Long>();
498    
499                    for (DLFileEntryType dlFileEntryType : dlFileEntryTypes) {
500                            fileEntryTypeIds.add(dlFileEntryType.getFileEntryTypeId());
501                    }
502    
503                    return fileEntryTypeIds;
504            }
505    
506            protected long getFileEntryTypesPrimaryFolderId(long folderId)
507                    throws NoSuchFolderException, SystemException {
508    
509                    while (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
510                            DLFolder dlFolder = dlFolderPersistence.findByPrimaryKey(folderId);
511    
512                            if (dlFolder.isOverrideFileEntryTypes()) {
513                                    break;
514                            }
515    
516                            folderId = dlFolder.getParentFolderId();
517                    }
518    
519                    return folderId;
520            }
521    
522            protected long updateDDMStructure(
523                            long userId, String fileEntryTypeUuid, long fileEntryTypeId,
524                            long groupId, String name, String description,
525                            ServiceContext serviceContext)
526                    throws PortalException, SystemException {
527    
528                    fixDDMStructureKey(fileEntryTypeUuid, fileEntryTypeId, groupId);
529    
530                    String ddmStructureKey = DLUtil.getDDMStructureKey(fileEntryTypeUuid);
531    
532                    Map<Locale, String> nameMap = new HashMap<Locale, String>();
533    
534                    Locale locale = serviceContext.getLocale();
535    
536                    nameMap.put(locale, name);
537    
538                    Locale defaultLocale = LocaleUtil.getDefault();
539    
540                    nameMap.put(defaultLocale, name);
541    
542                    Map<Locale, String> descriptionMap = new HashMap<Locale, String>();
543    
544                    descriptionMap.put(locale, description);
545                    descriptionMap.put(defaultLocale, description);
546    
547                    String xsd = ParamUtil.getString(serviceContext, "xsd");
548    
549                    DDMStructure ddmStructure = ddmStructureLocalService.fetchStructure(
550                            groupId, ddmStructureKey);
551    
552                    if ((ddmStructure != null) && Validator.isNull(xsd)) {
553                            xsd = ddmStructure.getXsd();
554                    }
555    
556                    Locale[] contentAvailableLocales = LocaleUtil.fromLanguageIds(
557                            LocalizationUtil.getAvailableLocales(xsd));
558    
559                    for (Locale contentAvailableLocale : contentAvailableLocales) {
560                            nameMap.put(contentAvailableLocale, name);
561    
562                            descriptionMap.put(contentAvailableLocale, description);
563                    }
564    
565                    try {
566                            if (ddmStructure == null) {
567                                    ddmStructure = ddmStructureLocalService.addStructure(
568                                            userId, groupId,
569                                            PortalUtil.getClassNameId(DLFileEntryMetadata.class),
570                                            ddmStructureKey, nameMap, descriptionMap, xsd, "xml",
571                                            DDMStructureConstants.TYPE_AUTO, serviceContext);
572                            }
573                            else {
574                                    ddmStructure = ddmStructureLocalService.updateStructure(
575                                            ddmStructure.getStructureId(), nameMap, descriptionMap, xsd,
576                                            serviceContext);
577                            }
578    
579                            return ddmStructure.getStructureId();
580                    }
581                    catch (StructureXsdException sxe) {
582                            if (ddmStructure != null) {
583                                    ddmStructureLocalService.deleteStructure(
584                                            ddmStructure.getStructureId());
585                            }
586                    }
587    
588                    return 0;
589            }
590    
591            protected void validate(
592                            long fileEntryTypeId, long groupId, String fileEntryTypeName,
593                            long[] ddmStructureIds)
594                    throws PortalException, SystemException {
595    
596                    DLFileEntryType dlFileEntryType = dlFileEntryTypePersistence.fetchByG_N(
597                            groupId, fileEntryTypeName);
598    
599                    if ((dlFileEntryType != null) &&
600                            (dlFileEntryType.getFileEntryTypeId() != fileEntryTypeId)) {
601    
602                            throw new DuplicateFileEntryTypeException(fileEntryTypeName);
603                    }
604    
605                    if (ddmStructureIds.length == 0) {
606                            throw new NoSuchMetadataSetException();
607                    }
608    
609                    for (long ddmStructureId : ddmStructureIds) {
610                            DDMStructure ddmStructure =
611                                    ddmStructurePersistence.fetchByPrimaryKey(ddmStructureId);
612    
613                            if (ddmStructure == null) {
614                                    throw new NoSuchMetadataSetException();
615                            }
616                    }
617            }
618    
619    }