001/* 002 * (C) Copyright 2006 Nuxeo SA (http://nuxeo.com/) and others. 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 * 016 * Contributors: 017 * Nuxeo - initial API and implementation 018 * 019 * 020 * $Id: PluginExtension.java 3036 2006-09-18 17:32:20Z janguenot $ 021 */ 022 023package org.nuxeo.ecm.platform.filemanager.service.extension; 024 025import java.util.ArrayList; 026import java.util.List; 027 028import org.nuxeo.common.xmap.annotation.XNode; 029import org.nuxeo.common.xmap.annotation.XNodeList; 030import org.nuxeo.common.xmap.annotation.XObject; 031import org.nuxeo.ecm.core.api.NuxeoException; 032import org.nuxeo.ecm.platform.filemanager.service.FileManagerService; 033import org.nuxeo.runtime.model.Descriptor; 034 035/** 036 * @author akalogeropoulos 037 */ 038@XObject("plugin") 039public class FileImporterDescriptor implements Descriptor { 040 041 public static final List<String> DEFAULT_FILTER = new ArrayList<>(); 042 043 @XNode("@enabled") 044 boolean enabled = true; 045 046 @XNode("@name") 047 protected String name; 048 049 /** 050 * @deprecated since 11.1. 051 */ 052 @Deprecated(since = "11.1") 053 @XNode("@class") 054 protected String className; 055 056 /** 057 * @since 11.1 058 */ 059 @XNode("@class") 060 protected Class<? extends FileImporter> klass; 061 062 @XNode("@docType") 063 protected String docType; 064 065 @XNodeList(value = "filter", type = ArrayList.class, componentType = String.class) 066 protected List<String> filters = DEFAULT_FILTER; 067 068 @XNode("@filter") 069 protected String filter; 070 071 @XNode("@order") 072 private Integer order; 073 074 @XNode("@merge") 075 private boolean merge = false; 076 077 public String getName() { 078 return name; 079 } 080 081 public void setName(String name) { 082 this.name = name; 083 } 084 085 /** 086 * @deprecated since 11.1. Use {@link #klass}. 087 */ 088 @Deprecated(since = "11.1") 089 public String getClassName() { 090 return className; 091 } 092 093 /** 094 * @deprecated since 11.1. Use {@link #klass}. 095 */ 096 @Deprecated(since = "11.1") 097 public void setClassName(String className) { 098 this.className = className; 099 } 100 101 /** 102 * Returns the configured document type to be created when using the importer 103 * 104 * @since 5.5 105 */ 106 public String getDocType() { 107 return docType; 108 } 109 110 public String getFilter() { 111 return filter; 112 } 113 114 public void setFilter(String filter) { 115 this.filter = filter; 116 } 117 118 public List<String> getFilters() { 119 return filters; 120 } 121 122 public void setFilters(List<String> filters) { 123 this.filters = filters; 124 } 125 126 public boolean isEnabled() { 127 return enabled; 128 } 129 130 public Integer getOrder() { 131 return order; 132 } 133 134 /** 135 * Returns {@code true} if this {@code FileImporterDescriptor} should be merged with an existing one, {@code false} 136 * otherwise. 137 * 138 * @since 5.5 139 */ 140 public boolean isMerge() { 141 return merge; 142 } 143 144 /** 145 * @since 11.1 146 */ 147 public FileImporter newInstance() { 148 try { 149 FileImporter fileImporter = klass.getDeclaredConstructor().newInstance(); 150 fileImporter.setName(name); 151 fileImporter.setEnabled(enabled); 152 fileImporter.setDocType(docType); 153 fileImporter.setFilters(filters); 154 fileImporter.setOrder(order); 155 return fileImporter; 156 } catch (ReflectiveOperationException e) { 157 throw new NuxeoException(e); 158 } 159 } 160 161 @Override 162 public String getId() { 163 return name; 164 } 165 166 @Override 167 public Descriptor merge(Descriptor o) { 168 FileImporterDescriptor other = (FileImporterDescriptor) o; 169 if (!other.merge) { 170 return other; 171 } 172 173 FileImporterDescriptor merged = new FileImporterDescriptor(); 174 merged.name = other.name; 175 merged.enabled = other.enabled; 176 merged.klass = defaultValue(other.klass, klass); 177 merged.className = defaultValue(other.className, className); 178 merged.docType = defaultValue(other.docType, docType); 179 merged.filters = new ArrayList<>(); 180 merged.filters.addAll(filters); 181 merged.filters.addAll(other.filters); 182 merged.order = defaultValue(other.order, order); 183 return merged; 184 } 185 186 protected <T> T defaultValue(T value, T defaultValue) { 187 return value == null ? defaultValue : value; 188 } 189 190 @Override 191 public boolean doesRemove() { 192 return !enabled; 193 } 194}