package org.rr.jeborker.gui.model; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.rr.commons.mufs.IResourceHandler; import org.rr.commons.mufs.ResourceHandlerFactory; import org.rr.commons.utils.StringUtil; import org.rr.jeborker.db.item.EbookPropertyItem; import org.rr.jeborker.metadata.MetadataHandlerFactory; import org.rr.jeborker.metadata.MetadataProperty; import org.rr.jeborker.metadata.IMetadataReader.COMMON_METADATA_TYPES; import com.l2fprod.common.propertysheet.Property; public class EbookSheetPropertyMultiSelectionModel extends EbookSheetPropertyModel { public void loadProperties(List<EbookPropertyItem> items) { final List<IResourceHandler> ebookResourceHandlers = new ArrayList<>(items.size()); for (int i = 0; i < items.size(); i++) { EbookPropertyItem ebookPropertyItem = items.get(i); if(ebookPropertyItem != null && ebookPropertyItem.getFile() != null) { IResourceHandler resourceHandler = ResourceHandlerFactory.getResourceHandler(ebookPropertyItem.getFile()); ebookResourceHandlers.add(resourceHandler); } } reader = MetadataHandlerFactory.getReaderForIResourceHandlers(ebookResourceHandlers); allMetadata = new ArrayList<>(COMMON_METADATA_TYPES.values().length); final ArrayList<Property> result = new ArrayList<>(allMetadata.size()); for(COMMON_METADATA_TYPES type : COMMON_METADATA_TYPES.values()) { List<MetadataProperty> l = Collections.emptyList(); List<MetadataProperty> metadataByType = reader.getMetadataByType(true, l, type); if(!metadataByType.isEmpty()) { MetadataProperty metadataProperty = metadataByType.get(0); if(metadataProperty != null) { allMetadata.add(metadataProperty); if(metadataProperty.isVisible()) { Property property = createProperty(metadataProperty, items, type); result.add(property); } } } } Collections.sort(result, PROPERTY_COMPARATOR); setProperties(result.toArray(new Property[result.size()])); } private static Property createProperty(final MetadataProperty metadataProperty, final List<EbookPropertyItem> items, final COMMON_METADATA_TYPES type) { return new EbookSheetProperty(metadataProperty, items, -1) { final ArrayList<String> values = new ArrayList<String>(items.size()) { { add(null); //selection value for(EbookPropertyItem item : items) { addAll(type.getValue(item)); } } }; @Override public Object getValue() { Object sValue = super.getValue(); if(sValue instanceof List) { Object o = ((List<?>) sValue).get(0); values.set(0, StringUtil.toString(o, true)); } else { values.set(0, StringUtil.toString(sValue, true)); } return values; } }; } }