Java tutorial
/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * https://github.com/CILEA/dspace-cris/wiki/License */ package org.dspace.app.cris.util; import it.cilea.osd.jdyna.model.AWidget; import java.beans.PropertyEditor; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.List; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; import org.apache.commons.lang.StringUtils; import org.dspace.app.cris.model.ResearcherPage; import org.dspace.app.cris.model.RestrictedField; import org.dspace.app.cris.model.RestrictedFieldFile; import org.dspace.app.cris.model.RestrictedFieldLocalOrRemoteFile; import org.dspace.app.cris.model.VisibilityConstants; import org.dspace.app.cris.model.jdyna.DecoratorRPPropertiesDefinition; import org.dspace.app.cris.model.jdyna.DecoratorRestrictedField; import org.dspace.app.cris.model.jdyna.RPPropertiesDefinition; import org.dspace.app.cris.model.jdyna.RPProperty; import org.dspace.app.cris.service.ApplicationService; public class UtilsXLS { /** * Characters sequence used to split multiple values in repeatable field * escaped for use in regex expression */ public static final String ESCAPE_STOPFIELDS_EXCEL = "\\|\\|\\|"; /** * Characters sequence used to split multiple values in repeatable field */ public static final String STOPFIELDS_EXCEL = "|||"; public static int createCell(ApplicationService applicationService, int y, int i, DecoratorRPPropertiesDefinition decorator, ResearcherPage researcher, WritableSheet sheet) throws IOException, RowsExceededException, WriteException { return createElement(applicationService, y, i, decorator.getReal(), decorator.getRendering(), researcher, sheet); } private static int createElement(ApplicationService applicationService, int y, int i, RPPropertiesDefinition real, AWidget rendering, ResearcherPage researcher, WritableSheet sheet) throws IOException, RowsExceededException, WriteException { return createSimpleElement(applicationService, y, i, real.getShortName(), researcher.getDynamicField().getProprietaDellaTipologia(real), sheet); } private static int createSimpleElement(ApplicationService applicationService, int y, int i, String shortName, List<RPProperty> proprietaDellaTipologia, WritableSheet sheet) throws RowsExceededException, WriteException { String field_value = ""; String field_visibility = ""; boolean first = true; for (RPProperty rr : proprietaDellaTipologia) { PropertyEditor pe = rr.getTypo().getRendering().getPropertyEditor(applicationService); pe.setValue(rr.getObject()); if (!first) { field_value += STOPFIELDS_EXCEL; } field_value += pe.getAsText(); if (!first) { field_visibility += STOPFIELDS_EXCEL; } field_visibility += VisibilityConstants.getDescription(rr.getVisibility()); first = false; } y = y + 1; Label label_v = new Label(y, i, field_value); sheet.addCell(label_v); Label labelCaption = new Label(y, 0, shortName); sheet.addCell(labelCaption); y = y + 1; Label label_vv = new Label(y, i, field_visibility); sheet.addCell(label_vv); labelCaption = new Label(y, 0, shortName + ImportExportUtils.LABELCAPTION_VISIBILITY_SUFFIX); sheet.addCell(labelCaption); return y; } public static int createCell(ApplicationService applicationService, int y, int i, DecoratorRestrictedField decorator, ResearcherPage researcher, WritableSheet sheet) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, RowsExceededException, WriteException { String shortName = decorator.getShortName(); Method[] methods = researcher.getClass().getMethods(); Object field = null; Method method = null; for (Method m : methods) { if (m.getName().toLowerCase().equals("get" + shortName.toLowerCase())) { field = m.invoke(researcher, null); method = m; break; } } if (method.getReturnType().isAssignableFrom(List.class)) { String field_value = ""; String field_visibility = ""; boolean first = true; for (RestrictedField rr : (List<RestrictedField>) field) { if (!first) { field_value += STOPFIELDS_EXCEL; } field_value += rr.getValue(); if (!first) { field_visibility += STOPFIELDS_EXCEL; } field_visibility += VisibilityConstants.getDescription(rr.getVisibility()); first = false; } y = y + 1; Label label_v = new Label(y, i, field_value); Label labelCaption = new Label(y, 0, decorator.getShortName()); sheet.addCell(labelCaption); y = y + 1; Label label_vv = new Label(y, i, field_visibility); labelCaption = new Label(y, 0, decorator.getShortName() + ImportExportUtils.LABELCAPTION_VISIBILITY_SUFFIX); sheet.addCell(labelCaption); sheet.addCell(label_v); sheet.addCell(label_vv); } else if (method.getReturnType().isAssignableFrom(String.class)) { y = y + 1; sheet.addCell(new Label(y, i, (String) field)); Label labelCaption = new Label(y, 0, decorator.getShortName()); sheet.addCell(labelCaption); } else { if (RestrictedFieldLocalOrRemoteFile.class.isAssignableFrom(method.getReturnType())) { RestrictedFieldLocalOrRemoteFile rflor = (RestrictedFieldLocalOrRemoteFile) field; y = y + 1; if (StringUtils.isNotEmpty(rflor.getRemoteUrl())) { sheet.addCell(new Label(y, i, rflor.getRemoteUrl())); } else { sheet.addCell(new Label(y, i, rflor.getMimeType() + STOPFIELDS_EXCEL + rflor.getValue())); } Label labelCaption = new Label(y, 0, decorator.getShortName()); sheet.addCell(labelCaption); y = y + 1; sheet.addCell(new Label(y, i, VisibilityConstants.getDescription(rflor.getVisibility()))); labelCaption = new Label(y, 0, decorator.getShortName() + ImportExportUtils.LABELCAPTION_VISIBILITY_SUFFIX); sheet.addCell(labelCaption); } else if (RestrictedFieldFile.class.isAssignableFrom(method.getReturnType())) { RestrictedFieldFile rflor = (RestrictedFieldFile) field; y = y + 1; Label labelCaption = new Label(y, 0, decorator.getShortName()); sheet.addCell(labelCaption); if (StringUtils.isNotEmpty(rflor.getValue())) { sheet.addCell(new Label(y, i, rflor.getMimeType() + STOPFIELDS_EXCEL + rflor.getValue())); } y = y + 1; labelCaption = new Label(y, 0, decorator.getShortName() + ImportExportUtils.LABELCAPTION_VISIBILITY_SUFFIX); sheet.addCell(labelCaption); if (StringUtils.isNotEmpty(rflor.getValue())) { sheet.addCell(new Label(y, i, VisibilityConstants.getDescription(rflor.getVisibility()))); } } else { RestrictedField rr = (RestrictedField) field; y = y + 1; sheet.addCell(new Label(y, i, rr.getValue())); Label labelCaption = new Label(y, 0, decorator.getShortName()); sheet.addCell(labelCaption); y = y + 1; sheet.addCell(new Label(y, i, VisibilityConstants.getDescription(rr.getVisibility()))); labelCaption = new Label(y, 0, decorator.getShortName() + ImportExportUtils.LABELCAPTION_VISIBILITY_SUFFIX); sheet.addCell(labelCaption); } } return y; } }