001/* 002 * Copyright 2019 Anyware Services 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.ametys.cms.content.type; 017 018import java.util.ArrayList; 019import java.util.Collections; 020import java.util.List; 021 022import org.ametys.cms.content.references.OutgoingReferences; 023import org.ametys.cms.content.references.Referencer; 024import org.ametys.cms.data.Reference; 025import org.ametys.cms.data.type.impl.ReferenceRepositoryElementType; 026 027/** 028 * Class for reference type of elements used by contents 029 */ 030public class ReferenceContentElementType extends ReferenceRepositoryElementType implements Referencer 031{ 032 public OutgoingReferences getOutgoingReferences(Object value) 033 { 034 if (value != null) 035 { 036 if (value instanceof Reference) 037 { 038 OutgoingReferences references = new OutgoingReferences(); 039 List<String> refValues = Collections.singletonList(((Reference) value).getValue()); 040 references.put(((Reference) value).getType(), refValues); 041 return references; 042 } 043 else if (value instanceof Reference[]) 044 { 045 OutgoingReferences references = new OutgoingReferences(); 046 for (Reference singleValue : (Reference[]) value) 047 { 048 List<String> values; 049 if (references.containsKey(singleValue.getType())) 050 { 051 values = references.get(singleValue.getType()); 052 } 053 else 054 { 055 values = new ArrayList<>(); 056 } 057 values.add(singleValue.getValue()); 058 059 references.put(singleValue.getType(), values); 060 } 061 return references; 062 } 063 else 064 { 065 throw new IllegalArgumentException("Try to get outgoing references of the non reference value '" + value + "'"); 066 } 067 } 068 else 069 { 070 return OutgoingReferences.EMPTY; 071 } 072 } 073}