diff --git a/voila-runtime-core/pom.xml b/voila-runtime-core/pom.xml index 7794d896b2f060f22ff01713b6db24d50cd4af09..5d11bc616c381bbaf5be26cf3911c5edb4c11bb4 100644 --- a/voila-runtime-core/pom.xml +++ b/voila-runtime-core/pom.xml @@ -70,6 +70,10 @@ <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> </exclusion> + <exclusion> + <groupId>commons-beanutils</groupId> + <artifactId>commons-beanutils-core</artifactId> + </exclusion> </exclusions> </dependency> <dependency> @@ -96,32 +100,10 @@ </exclusion> </exclusions> </dependency> - <dependency> - <groupId>commons-beanutils</groupId> - <artifactId>commons-beanutils</artifactId> - <version>1.8.3</version> - <exclusions> - <exclusion> - <groupId>commons-logging</groupId> - <artifactId>commons-logging</artifactId> - </exclusion> - </exclusions> - </dependency> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency> - <dependency> - <groupId>org.apache.velocity</groupId> - <artifactId>velocity</artifactId> - <version>1.6.4</version> - <exclusions> - <exclusion> - <groupId>commons-collections</groupId> - <artifactId>commons-collections</artifactId> - </exclusion> - </exclusions> - </dependency> </dependencies> </project> \ No newline at end of file diff --git a/voila-runtime-displaytag/pom.xml b/voila-runtime-displaytag/pom.xml index 50fc544ff475000b63e4c84896fae72f5d200152..6ec8fa200e786d13f53ab388e9a8c11ca0c476e3 100644 --- a/voila-runtime-displaytag/pom.xml +++ b/voila-runtime-displaytag/pom.xml @@ -21,19 +21,31 @@ <version>${project.parent.version}</version> </dependency> <dependency> - <groupId>com.lowagie</groupId> - <artifactId>itext</artifactId> - <version>2.1.7</version> + <groupId>com.itextpdf</groupId> + <artifactId>itextpdf</artifactId> + <version>5.5.13.3</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> - <version>3.6</version> + <version>5.2.2</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>1.4</version> </dependency> + <dependency> + <groupId>javax.servlet.jsp</groupId> + <artifactId>javax.servlet.jsp-api</artifactId> + <version>2.3.3</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>servlet-api</artifactId> + <version>2.5</version> + <scope>provided</scope> + </dependency> </dependencies> </project> \ No newline at end of file diff --git a/voila-runtime-displaytag/src/main/java/it/mice/voila/runtime/displaytag/pdfexporter/AbstractPdfExporter.java b/voila-runtime-displaytag/src/main/java/it/mice/voila/runtime/displaytag/pdfexporter/AbstractPdfExporter.java index e99ab26115438a43fdc38946bc612b3c5fdbe6ca..91e9ccea0a06d785222c508758a233f6971d334b 100644 --- a/voila-runtime-displaytag/src/main/java/it/mice/voila/runtime/displaytag/pdfexporter/AbstractPdfExporter.java +++ b/voila-runtime-displaytag/src/main/java/it/mice/voila/runtime/displaytag/pdfexporter/AbstractPdfExporter.java @@ -31,20 +31,22 @@ import org.displaytag.model.RowIterator; import org.displaytag.model.TableModel; import org.displaytag.util.TagConstants; -import com.lowagie.text.BadElementException; -import com.lowagie.text.Document; -import com.lowagie.text.DocumentException; -import com.lowagie.text.Element; -import com.lowagie.text.Font; -import com.lowagie.text.FontFactory; -import com.lowagie.text.HeaderFooter; -import com.lowagie.text.PageSize; -import com.lowagie.text.Paragraph; -import com.lowagie.text.Phrase; -import com.lowagie.text.Rectangle; -import com.lowagie.text.pdf.PdfPCell; -import com.lowagie.text.pdf.PdfPTable; -import com.lowagie.text.pdf.PdfWriter; +import com.itextpdf.text.BadElementException; +import com.itextpdf.text.BaseColor; +import com.itextpdf.text.Document; +import com.itextpdf.text.DocumentException; +import com.itextpdf.text.Element; +import com.itextpdf.text.Font; +import com.itextpdf.text.FontFactory; +import com.itextpdf.text.PageSize; +import com.itextpdf.text.Paragraph; +import com.itextpdf.text.Phrase; +import com.itextpdf.text.Rectangle; +import com.itextpdf.text.pdf.ColumnText; +import com.itextpdf.text.pdf.PdfContentByte; +import com.itextpdf.text.pdf.PdfPCell; +import com.itextpdf.text.pdf.PdfPTable; +import com.itextpdf.text.pdf.PdfWriter; /** * Created by IntelliJ IDEA. @@ -120,7 +122,7 @@ public abstract class AbstractPdfExporter extends AbstractTotalExporter { tablePDF.setWidthPercentage(100); tablePDF.setHeaderRows(1); - smallFont = FontFactory.getFont(FontFactory.HELVETICA, 7, Font.NORMAL, new Color(0, 0, 0)); + smallFont = FontFactory.getFont(FontFactory.HELVETICA, 7, Font.NORMAL, new BaseColor(0, 0, 0)); super.init(this.model); } @@ -162,8 +164,9 @@ public abstract class AbstractPdfExporter extends AbstractTotalExporter { PdfWriter.getInstance(document, out); document.addCreationDate(); - - prepareHeaderFooter(document); + + PdfWriter writer = PdfWriter.getInstance(document, out); + prepareHeaderFooter(writer, document); document.open(); @@ -273,7 +276,7 @@ public abstract class AbstractPdfExporter extends AbstractTotalExporter { if (value == null || value == "") { cell.setBorder(Rectangle.NO_BORDER); } else { - cell.setBackgroundColor(Color.LIGHT_GRAY); + cell.setBackgroundColor(BaseColor.LIGHT_GRAY); } } Object al = hc.getHtmlAttributes().get(TagConstants.ATTRIBUTE_ALIGN); @@ -317,13 +320,13 @@ public abstract class AbstractPdfExporter extends AbstractTotalExporter { document.add(new Phrase("")); } - protected void prepareHeaderFooter(Document document) { + protected void prepareHeaderFooter(PdfWriter writer, Document document) { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); String footerText = sdf.format(new Date()) + " pagina: "; - HeaderFooter footer = new HeaderFooter(new Phrase(footerText, smallFont), true); - footer.setBorder(Rectangle.NO_BORDER); - footer.setAlignment(Element.ALIGN_CENTER); - document.setFooter(footer); + PdfContentByte cb = writer.getDirectContent(); + Phrase footer = new Phrase(footerText, smallFont); + ColumnText.showTextAligned(cb, Element.ALIGN_CENTER, footer, + (document.right() - document.left()) / 2 + document.leftMargin(), document.bottom() - 10, 0); } /** diff --git a/voila-runtime-displaytag/src/main/java/it/mice/voila/runtime/displaytag/pdfexporter/BasicPdfExporter.java b/voila-runtime-displaytag/src/main/java/it/mice/voila/runtime/displaytag/pdfexporter/BasicPdfExporter.java index c633721d386a770a1efe203717b7246259e9da7f..e188706ab00ee621a596c36e8204adcef812d129 100644 --- a/voila-runtime-displaytag/src/main/java/it/mice/voila/runtime/displaytag/pdfexporter/BasicPdfExporter.java +++ b/voila-runtime-displaytag/src/main/java/it/mice/voila/runtime/displaytag/pdfexporter/BasicPdfExporter.java @@ -2,11 +2,11 @@ package it.mice.voila.runtime.displaytag.pdfexporter; import it.mice.voila.runtime.displaytag.DisplayTagUtils; -import com.lowagie.text.Document; -import com.lowagie.text.DocumentException; -import com.lowagie.text.Element; -import com.lowagie.text.Paragraph; -import com.lowagie.text.Phrase; +import com.itextpdf.text.Document; +import com.itextpdf.text.DocumentException; +import com.itextpdf.text.Element; +import com.itextpdf.text.Paragraph; +import com.itextpdf.text.Phrase; public class BasicPdfExporter extends AbstractPdfExporter { diff --git a/voila-runtime-displaytag/src/main/java/it/mice/voila/runtime/displaytag/poiexporter/JfExcelHssfView.java b/voila-runtime-displaytag/src/main/java/it/mice/voila/runtime/displaytag/poiexporter/JfExcelHssfView.java index 04fcbb32794071eb320fa07c740bf17b65b04e0f..51f073be1ce9c79e77e57ae1ece1dd271dc9b0c3 100644 --- a/voila-runtime-displaytag/src/main/java/it/mice/voila/runtime/displaytag/poiexporter/JfExcelHssfView.java +++ b/voila-runtime-displaytag/src/main/java/it/mice/voila/runtime/displaytag/poiexporter/JfExcelHssfView.java @@ -40,8 +40,11 @@ import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.hssf.util.CellReference; +import org.apache.poi.ss.util.CellReference; import org.apache.poi.hssf.util.HSSFColor; +import org.apache.poi.ss.usermodel.BorderStyle; +import org.apache.poi.ss.usermodel.FillPatternType; +import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.Name; import org.apache.poi.ss.util.CellRangeAddress; import org.displaytag.Messages; @@ -112,93 +115,93 @@ public class JfExcelHssfView extends AbstractTotalExporter { protected void initStyles(HSSFWorkbook wb) { titleFont = wb.createFont(); - titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); + titleFont.setBold(true); titleFont.setFontHeightInPoints((short) 12); - titleFont.setColor(HSSFColor.BLUE.index); + titleFont.setColor(HSSFColor.HSSFColorPredefined.BLUE.getIndex()); headerFont = wb.createFont(); - headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); + headerFont.setBold(true); headerFont.setFontHeightInPoints((short) 10); - headerFont.setColor(HSSFColor.BLUE.index); + headerFont.setColor(HSSFColor.HSSFColorPredefined.BLUE.getIndex()); dataFont = wb.createFont(); - dataFont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); + dataFont.setBold(true); dataFont.setFontHeightInPoints((short) 9); - dataFont.setColor(HSSFColor.BLACK.index); + dataFont.setColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex()); titleStyle = wb.createCellStyle(); // titleStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index); // titleStyle.setFillPattern(HSSFCellStyle.FINE_DOTS); - titleStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); + titleStyle.setAlignment(HorizontalAlignment.LEFT); titleStyle.setFont(titleFont); headerStyle = wb.createCellStyle(); // headerStyle.setFillBackgroundColor(HSSFColor.YELLOW.index); // headerStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); - headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); - headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); - headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); - headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); - headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); + headerStyle.setAlignment(HorizontalAlignment.CENTER); + headerStyle.setBorderTop(BorderStyle.THIN); + headerStyle.setBorderBottom(BorderStyle.THIN); + headerStyle.setBorderLeft(BorderStyle.THIN); + headerStyle.setBorderRight(BorderStyle.THIN); headerStyle.setWrapText(true); headerStyle.setFont(headerFont); totalStyle = wb.createCellStyle(); - totalStyle.setFillBackgroundColor(HSSFColor.YELLOW.index); - totalStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); + totalStyle.setFillBackgroundColor(HSSFColor.HSSFColorPredefined.YELLOW.getIndex()); + totalStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); cellStyle = createBorderedNoFillCellStyle(wb); cellStyle.setWrapText(true); cellStyleForDate = createBorderedNoFillCellStyle(wb); - cellStyleForDate.setAlignment(HSSFCellStyle.ALIGN_RIGHT); + cellStyleForDate.setAlignment(HorizontalAlignment.RIGHT); cellStyleForDate.setDataFormat(HSSFDataFormat .getBuiltinFormat("m/d/yy")); cellStyleForDateTime = createBorderedNoFillCellStyle(wb); - cellStyleForDateTime.setAlignment(HSSFCellStyle.ALIGN_RIGHT); + cellStyleForDateTime.setAlignment(HorizontalAlignment.RIGHT); cellStyleForDateTime.setDataFormat(HSSFDataFormat .getBuiltinFormat("m/d/yy h:mm")); cellStyleForCurrency1digit = createBorderedNoFillCellStyle(wb); - cellStyleForCurrency1digit.setAlignment(HSSFCellStyle.ALIGN_RIGHT); + cellStyleForCurrency1digit.setAlignment(HorizontalAlignment.RIGHT); cellStyleForCurrency1digit.setDataFormat(HSSFDataFormat .getBuiltinFormat("#,##0.00")); cellStyleForCurrency2digit = createBorderedNoFillCellStyle(wb); - cellStyleForCurrency2digit.setAlignment(HSSFCellStyle.ALIGN_RIGHT); + cellStyleForCurrency2digit.setAlignment(HorizontalAlignment.RIGHT); cellStyleForCurrency2digit.setDataFormat(HSSFDataFormat .getBuiltinFormat("#,##0.00")); cellStyleForCurrency3digit = createBorderedNoFillCellStyle(wb); - cellStyleForCurrency3digit.setAlignment(HSSFCellStyle.ALIGN_RIGHT); + cellStyleForCurrency3digit.setAlignment(HorizontalAlignment.RIGHT); cellStyleForCurrency3digit.setDataFormat(wb.createDataFormat().getFormat("#,##0.000")); cellStyleForCurrency4digit = createBorderedNoFillCellStyle(wb); - cellStyleForCurrency4digit.setAlignment(HSSFCellStyle.ALIGN_RIGHT); + cellStyleForCurrency4digit.setAlignment(HorizontalAlignment.RIGHT); cellStyleForCurrency4digit.setDataFormat(wb.createDataFormat().getFormat("#,##0.0000")); cellStyleForCurrency5digit = createBorderedNoFillCellStyle(wb); - cellStyleForCurrency5digit.setAlignment(HSSFCellStyle.ALIGN_RIGHT); + cellStyleForCurrency5digit.setAlignment(HorizontalAlignment.RIGHT); cellStyleForCurrency5digit.setDataFormat(wb.createDataFormat().getFormat("#,##0.00000")); cellStyleForPercentage = createBorderedNoFillCellStyle(wb); - cellStyleForPercentage.setAlignment(HSSFCellStyle.ALIGN_RIGHT); + cellStyleForPercentage.setAlignment(HorizontalAlignment.RIGHT); cellStyleForPercentage.setDataFormat(HSSFDataFormat .getBuiltinFormat("0%")); cellStyleForPercentage1digit = createBorderedNoFillCellStyle(wb); - cellStyleForPercentage1digit.setAlignment(HSSFCellStyle.ALIGN_RIGHT); + cellStyleForPercentage1digit.setAlignment(HorizontalAlignment.RIGHT); cellStyleForPercentage1digit.setDataFormat(HSSFDataFormat .getBuiltinFormat("0.0%")); cellStyleForPercentage2digit = createBorderedNoFillCellStyle(wb); - cellStyleForPercentage2digit.setAlignment(HSSFCellStyle.ALIGN_RIGHT); + cellStyleForPercentage2digit.setAlignment(HorizontalAlignment.RIGHT); cellStyleForPercentage2digit.setDataFormat(HSSFDataFormat .getBuiltinFormat("0.00%")); cellStyleForNumber = createBorderedNoFillCellStyle(wb); - cellStyleForNumber.setAlignment(HSSFCellStyle.ALIGN_RIGHT); + cellStyleForNumber.setAlignment(HorizontalAlignment.RIGHT); cellStyleForNumber.setDataFormat(HSSFDataFormat.getBuiltinFormat("0")); initialized = true; @@ -206,11 +209,11 @@ public class JfExcelHssfView extends AbstractTotalExporter { protected HSSFCellStyle createBorderedNoFillCellStyle(HSSFWorkbook wb) { HSSFCellStyle cs = wb.createCellStyle(); - cs.setFillPattern(HSSFCellStyle.NO_FILL); - cs.setBorderTop(HSSFCellStyle.BORDER_THIN); - cs.setBorderBottom(HSSFCellStyle.BORDER_THIN); - cs.setBorderLeft(HSSFCellStyle.BORDER_THIN); - cs.setBorderRight(HSSFCellStyle.BORDER_THIN); + cs.setFillPattern(FillPatternType.NO_FILL); + cs.setBorderTop(BorderStyle.THIN); + cs.setBorderBottom(BorderStyle.THIN); + cs.setBorderLeft(BorderStyle.THIN); + cs.setBorderRight(BorderStyle.THIN); // cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); cs.setFont(dataFont); diff --git a/voila-runtime-hibernate-spatial/pom.xml b/voila-runtime-hibernate-spatial/pom.xml index 87c993618139c40eb4d76c4bec06c553988e674f..9daa22ff56e7c9f2bb9136a5958d4b4514b6aece 100644 --- a/voila-runtime-hibernate-spatial/pom.xml +++ b/voila-runtime-hibernate-spatial/pom.xml @@ -32,7 +32,7 @@ <dependency> <groupId>com.google.maps</groupId> <artifactId>google-maps-services</artifactId> - <version>0.18.0</version> + <version>2.2.0</version> </dependency> <dependency> <groupId>it.micegroup.voila.runtime</groupId> diff --git a/voila-runtime-hibernate/src/main/java/it/mice/voila/runtime/hibernate/bag/CustomBagType.java b/voila-runtime-hibernate/src/main/java/it/mice/voila/runtime/hibernate/bag/CustomBagType.java index c087c147e32e79c3c19f436581d8d0982a7d5cf0..ba90a363491ca68d4e885ab24264b7cf011b87e3 100644 --- a/voila-runtime-hibernate/src/main/java/it/mice/voila/runtime/hibernate/bag/CustomBagType.java +++ b/voila-runtime-hibernate/src/main/java/it/mice/voila/runtime/hibernate/bag/CustomBagType.java @@ -11,6 +11,7 @@ import org.hibernate.collection.spi.PersistentCollection; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.persister.collection.CollectionPersister; +import org.hibernate.collection.internal.PersistentList; import org.hibernate.usertype.UserCollectionType; /** @@ -71,7 +72,8 @@ public class CustomBagType implements UserCollectionType { @Override public PersistentCollection wrap(SharedSessionContractImplementor session, Object collection) { - return new CustomPersistentBag(session, (CollectionPersister) collection); + PersistentList persistentList = new PersistentList(session, (List) collection); + return new CustomPersistentBag(session, persistentList); } @Override diff --git a/voila-runtime-hibernate/src/main/java/it/mice/voila/runtime/hibernate/bag/CustomPersistentBag.java b/voila-runtime-hibernate/src/main/java/it/mice/voila/runtime/hibernate/bag/CustomPersistentBag.java index b3197ad9c0a268565bdcb06eb65c9265aa80fe53..14cb872f5fe0ce2fd6c0c0503939584173028aa2 100644 --- a/voila-runtime-hibernate/src/main/java/it/mice/voila/runtime/hibernate/bag/CustomPersistentBag.java +++ b/voila-runtime-hibernate/src/main/java/it/mice/voila/runtime/hibernate/bag/CustomPersistentBag.java @@ -15,6 +15,7 @@ import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; import org.hibernate.LazyInitializationException; import org.hibernate.collection.internal.PersistentBag; +import org.hibernate.collection.internal.PersistentList; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.persister.collection.CollectionPersister; @@ -45,7 +46,11 @@ public class CustomPersistentBag extends PersistentBag { public CustomPersistentBag() { } - public int size() { + public CustomPersistentBag(SharedSessionContractImplementor session, PersistentList collection) { + super(session, collection); + } + + public int size() { try { return super.size(); } catch (LazyInitializationException e) { diff --git a/voila-runtime-hibernate/src/main/java/it/mice/voila/runtime/hibernate/listeners/SaveOrUpdateEventListener.java b/voila-runtime-hibernate/src/main/java/it/mice/voila/runtime/hibernate/listeners/SaveOrUpdateEventListener.java index 523d99da1316205e5896bade0d2d189aed5e7517..530dbb29eb3ce223faab8fd976ab86d0d5b52f01 100644 --- a/voila-runtime-hibernate/src/main/java/it/mice/voila/runtime/hibernate/listeners/SaveOrUpdateEventListener.java +++ b/voila-runtime-hibernate/src/main/java/it/mice/voila/runtime/hibernate/listeners/SaveOrUpdateEventListener.java @@ -3,6 +3,8 @@ package it.mice.voila.runtime.hibernate.listeners; import it.mice.voila.runtime.entity.Entity; import it.mice.voila.runtime.entity.TrackAttributeAwareEntity; +import javax.persistence.PreUpdate; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; @@ -11,117 +13,115 @@ import org.hibernate.engine.spi.EntityEntry; import org.hibernate.engine.spi.EntityKey; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.event.internal.DefaultSaveOrUpdateEventListener; +import org.hibernate.event.internal.EntityState; import org.hibernate.event.spi.EventSource; import org.hibernate.event.spi.SaveOrUpdateEvent; import org.hibernate.persister.entity.EntityPersister; /** - * Created by IntelliJ IDEA. - * User: zzy9v4 - * Date: 22-feb-2007 - * Time: 14.02.38 - * To change this template use File | Settings | File Templates. + * Created by IntelliJ IDEA. User: zzy9v4 Date: 22-feb-2007 Time: 14.02.38 To + * change this template use File | Settings | File Templates. */ public class SaveOrUpdateEventListener extends DefaultSaveOrUpdateEventListener { - private static final Log log = LogFactory.getLog(SaveOrUpdateEventListener.class); + private static final Log log = LogFactory.getLog(SaveOrUpdateEventListener.class); + + /** + * Determine whether the entity is persistent, detached, or transient + * + * @param entity The entity to check + * @param entityName The name of the entity + * @param entry The entity's entry in the persistence context + * @param source The originating session. + * @return The state. + */ + protected EntityState getEntityState(Object entity, String entityName, EntityEntry entry, // pass this as an + // argument only to + // avoid double looking + SessionImplementor source) { + + if (entry != null) { // the object is persistent + return EntityState.getEntityState(entity, entityName, entry, source, getAssumedUnsavedForEntity(entity)); + } else { // The object is not in the session cache !!! + return getInternalEntityState(entityName, entity, source); + } + } - /** - * Determine whether the entity is persistent, detached, or transient - * - * @param entity The entity to check - * @param entityName The name of the entity - * @param entry The entity's entry in the persistence context - * @param source The originating session. - * @return The state. - */ -// protected int getEntityState( -// Object entity, -// String entityName, -// EntityEntry entry, //pass this as an argument only to avoid double looking -// SessionImplementor source) { -// -// if (entry != null) { // the object is persistent -// return super.getEntityState(entity, entityName, entry, source); -// } else { //The object is not in the session cache !!! -// return getInternalEntityState(entityName, entity, source); -// } -// } + private EntityState getInternalEntityState(String entityName, Object entity, SessionImplementor source) { + // the object is transient or detached + // the entity is not associated with the session, so + // try interceptor and unsaved-value + if (entity instanceof Entity) { + Entity wrappedEntity = (Entity) entity; + if (wrappedEntity.isNewEntity()) { + return EntityState.TRANSIENT; + } else { + return EntityState.DETACHED; + } + } + Boolean assumedUnsaved = getAssumedUnsavedForEntity(entity); + EntityState entityState = EntityState.getEntityState(entity, entityName, null, source, assumedUnsaved); -// private int getInternalEntityState(String entityName, Object entity, SessionImplementor source) { -// //the object is transient or detached -// //the entity is not associated with the session, so -// //try interceptor and unsaved-value -// if (entity instanceof Entity) { -// Entity wrappedEntity = (Entity)entity; -// if (wrappedEntity.isNewEntity()) { -// return TRANSIENT; -// } else { -// return DETACHED; -// } -// } -// -// if (ForeignKeys.isTransient(entityName, entity, getAssumedUnsavedForEntity(entity), source)) { -// if (log.isTraceEnabled()) { -// log.trace( -// "transient instance of: " + -// getLoggableName(entityName, entity) -// ); -// } -// return TRANSIENT; -// } else { -// if (log.isTraceEnabled()) { -// log.trace( -// "detached instance of: " + -// getLoggableName(entityName, entity) -// ); -// } -// return DETACHED; -// } -// } + if (entityState == EntityState.TRANSIENT) { + if (log.isTraceEnabled()) { + log.trace("transient instance of: " + getLoggableName(entityName, entity)); + } + } else { + if (log.isTraceEnabled()) { + log.trace("detached instance of: " + getLoggableName(entityName, entity)); + } + } + return entityState; + } - private Boolean getAssumedUnsavedForEntity(Object entity) { - if (entity instanceof Entity) { - if (((Entity) entity).isNewEntity()) { - return Boolean.TRUE; - } else { - return Boolean.FALSE; - } - } - return null; - } + private Boolean getAssumedUnsavedForEntity(Object entity) { + if (entity instanceof Entity) { + if (((Entity) entity).isNewEntity()) { + return Boolean.TRUE; + } else { + return Boolean.FALSE; + } + } + return null; + } + @Override public void onSaveOrUpdate(SaveOrUpdateEvent event) { - Entity entity = (Entity)event.getObject(); - if (entity.isNewEntity()) { - if (entity instanceof TrackAttributeAwareEntity) { - ((TrackAttributeAwareEntity) entity).trackInsertAttribute(); - } - } - if (entity.isNewEntity() || entity.isChangedEntity()) { - if (entity instanceof TrackAttributeAwareEntity) { - ((TrackAttributeAwareEntity) entity).trackUpdateAttribute(); - } - } + Entity entity = (Entity) event.getObject(); + if (entity.isNewEntity()) { + if (entity instanceof TrackAttributeAwareEntity) { + ((TrackAttributeAwareEntity) entity).trackInsertAttribute(); + } + } + if (entity.isNewEntity() || entity.isChangedEntity()) { + if (entity instanceof TrackAttributeAwareEntity) { + ((TrackAttributeAwareEntity) entity).trackUpdateAttribute(); + } + } super.onSaveOrUpdate(event); } - /* (non-Javadoc) - * @see org.hibernate.event.def.DefaultSaveOrUpdateEventListener#performUpdate(org.hibernate.event.SaveOrUpdateEvent, java.lang.Object, org.hibernate.persister.entity.EntityPersister) + /* + * (non-Javadoc) + * + * @see + * org.hibernate.event.def.DefaultSaveOrUpdateEventListener#performUpdate(org. + * hibernate.event.SaveOrUpdateEvent, java.lang.Object, + * org.hibernate.persister.entity.EntityPersister) */ @Override - protected void performUpdate(SaveOrUpdateEvent event, Object entity, - EntityPersister persister) throws HibernateException { - + protected void performUpdate(SaveOrUpdateEvent event, Object entity, EntityPersister persister) + throws HibernateException { + final EventSource source = event.getSession(); - EntityKey key = new EntityKey( event.getRequestedId(), persister); + EntityKey key = new EntityKey(event.getRequestedId(), persister); if (source.getPersistenceContext().getEntity(key) != null) { source.getPersistenceContext().removeEntity(key); } super.performUpdate(event, entity, persister); } - + protected String getLoggableName(String entityName, Object entity) { return entityName == null ? entity.getClass().getName() : entityName; } diff --git a/voila-runtime-jasper4/pom.xml b/voila-runtime-jasper4/pom.xml index 791a4737c03351552521d137fff103253169fd06..8837649a3e4c6eb42d48e2dc23bcc772314bea4f 100644 --- a/voila-runtime-jasper4/pom.xml +++ b/voila-runtime-jasper4/pom.xml @@ -14,38 +14,29 @@ <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> - <version>4.1.2</version> + <version>6.21.3</version> <exclusions> <!-- Exclude Commons Logging in favor of SLF4j --> <exclusion> <groupId>xml-apis</groupId> - <artifactId>xml-apis</artifactId> - </exclusion> - <exclusion> - <groupId>org.apache.poi</groupId> - <artifactId>poi</artifactId> + <artifactId>xml-apis-ext</artifactId> </exclusion> </exclusions> </dependency> - <dependency> - <groupId>org.apache.poi</groupId> - <artifactId>poi</artifactId> - <version>3.9</version> - </dependency> <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports-fonts</artifactId> - <version>4.0.0</version> + <version>6.21.3</version> </dependency> <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports-chart-themes</artifactId> - <version>4.0.2</version> + <version>6.21.3</version> </dependency> <dependency> <groupId>org.jasypt</groupId> <artifactId>jasypt</artifactId> - <version>1.7.1</version> + <version>1.9.3</version> </dependency> <dependency> <groupId>fonts</groupId> diff --git a/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/JasperReportDefinition.java b/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/JasperReportDefinition.java index f5658a92a90f5e1014ece099c40966dbe974a0a1..29dccdc4ce86a867eb4b3a2f7a2b3784b6a51c72 100644 --- a/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/JasperReportDefinition.java +++ b/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/JasperReportDefinition.java @@ -35,7 +35,7 @@ import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.design.JasperDesign; import net.sf.jasperreports.engine.export.JRCsvExporter; -import net.sf.jasperreports.engine.export.JRHtmlExporter; +import net.sf.jasperreports.engine.export.HtmlExporter; import net.sf.jasperreports.engine.export.JRPdfExporter; import net.sf.jasperreports.engine.export.JRPdfExporterParameter; import net.sf.jasperreports.engine.export.JRRtfExporter; @@ -158,7 +158,7 @@ public class JasperReportDefinition extends ApplicationObjectSupport { public JasperReportDefinition() { Map<String, Class<? extends JRExporter>> mappings = new HashMap<String, Class<? extends JRExporter>>(5); mappings.put("csv", JRCsvExporter.class); - mappings.put("html", JRHtmlExporter.class); + mappings.put("html", HtmlExporter.class); mappings.put("pdf", JRPdfExporter.class); mappings.put("xls", JRXlsExporter.class); mappings.put("rtf", JRRtfExporter.class); diff --git a/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/JasperUtils.java b/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/JasperUtils.java index 569d5575967860ba24a3de5643c3a83d268f1ddd..897b4c0fec1380306cc626adf00c4eca57fd870e 100644 --- a/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/JasperUtils.java +++ b/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/JasperUtils.java @@ -12,9 +12,11 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; +import net.sf.jasperreports.engine.DefaultJasperReportsContext; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; -import net.sf.jasperreports.engine.util.JRProperties; +import net.sf.jasperreports.engine.JRPropertiesUtil; +import net.sf.jasperreports.engine.JasperReportsContext; /** * @@ -41,9 +43,10 @@ public class JasperUtils { Map<String, Object> parameterMap = new HashMap<String, Object>(); parameterMap.put("dataSource", JasperUtils.buildDataSource(dataSource)); parameterMap.put("format", format); - JRProperties.setProperty("net.sf.jasperreports.default.pdf.encoding", "Identity-H"); - JRProperties.setProperty("net.sf.jasperreports.default.pdf.font.name", "ARIALUNI.TTF"); - + JasperReportsContext jasperReportsContext = DefaultJasperReportsContext.getInstance(); + JRPropertiesUtil jrPropertiesUtil = JRPropertiesUtil.getInstance(jasperReportsContext); + jrPropertiesUtil.setProperty("net.sf.jasperreports.default.pdf.encoding", "Identity-H"); + jrPropertiesUtil.setProperty("net.sf.jasperreports.default.pdf.font.name", "ARIALUNI.TTF"); return parameterMap; } diff --git a/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/utils/JasperReportsUtils.java b/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/utils/JasperReportsUtils.java index 6e822ebf7c1bb38a447a18ce22b63dabf450fedc..60e2593b9f058ede2ccc29d13e90e51792702e87 100644 --- a/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/utils/JasperReportsUtils.java +++ b/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/utils/JasperReportsUtils.java @@ -15,7 +15,7 @@ import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.data.JRBeanArrayDataSource; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import net.sf.jasperreports.engine.export.JRCsvExporter; -import net.sf.jasperreports.engine.export.JRHtmlExporter; +import net.sf.jasperreports.engine.export.HtmlExporter; import net.sf.jasperreports.engine.export.JRPdfExporter; import net.sf.jasperreports.engine.export.JRXlsExporter; @@ -152,7 +152,7 @@ public abstract class JasperReportsUtils { throws JRException { JasperPrint print = JasperFillManager.fillReport(report, parameters, convertReportData(reportData)); - render(new JRHtmlExporter(), print, writer); + render(new HtmlExporter(), print, writer); } /** @@ -172,7 +172,7 @@ public abstract class JasperReportsUtils { Map exporterParameters) throws JRException { JasperPrint print = JasperFillManager.fillReport(report, parameters, convertReportData(reportData)); - JRHtmlExporter exporter = new JRHtmlExporter(); + HtmlExporter exporter = new HtmlExporter(); exporter.setParameters(exporterParameters); render(exporter, print, writer); } diff --git a/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/view/helpers/JasperReportsHtmlViewJasper.java b/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/view/helpers/JasperReportsHtmlViewJasper.java index 41018c2eb9451739fa8cb7a41c3b9968f101f4ff..23345353a320c6375bec4c0190059ea9cd86784e 100644 --- a/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/view/helpers/JasperReportsHtmlViewJasper.java +++ b/voila-runtime-jasper4/src/main/java/it/mice/voila/runtime/jasper/view/helpers/JasperReportsHtmlViewJasper.java @@ -1,7 +1,7 @@ package it.mice.voila.runtime.jasper.view.helpers; import net.sf.jasperreports.engine.JRExporter; -import net.sf.jasperreports.engine.export.JRHtmlExporter; +import net.sf.jasperreports.engine.export.HtmlExporter; /** * Implementation of <code>AbstractJasperReportsSingleFormatView</code> @@ -19,7 +19,7 @@ public class JasperReportsHtmlViewJasper extends AbstractJasperReportsSingleForm @Override protected JRExporter createExporter() { - return new JRHtmlExporter(); + return new HtmlExporter(); } @Override diff --git a/voila-runtime-oawtemplate/pom.xml b/voila-runtime-oawtemplate/pom.xml index 825d582ab615428b533e9d3aaefb96c8cb2ff8c5..c48d7f0acb3a1dce04abf60e175e3a608a796000 100644 --- a/voila-runtime-oawtemplate/pom.xml +++ b/voila-runtime-oawtemplate/pom.xml @@ -71,13 +71,6 @@ <version>2.6.0.v20100914-1218</version> <type>jar</type> </dependency> - - <dependency> - <groupId>commons-beanutils</groupId> - <artifactId>commons-beanutils</artifactId> - <version>1.6.1</version> - <type>jar</type> - </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> diff --git a/voila-runtime-root/pom.xml b/voila-runtime-root/pom.xml index 652bcbecf89ee54c75c5ad378a6007dfae6626e7..80f8b1930f57634f2b869bb414dc9bf331f6fb51 100644 --- a/voila-runtime-root/pom.xml +++ b/voila-runtime-root/pom.xml @@ -316,7 +316,7 @@ <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> - <version>1.8.3</version> + <version>1.9.4</version> </dependency> <dependency> <groupId>commons-lang</groupId> @@ -345,20 +345,15 @@ <version>3.2.2</version> </dependency> <dependency> - <groupId>org.apache.velocity</groupId> - <artifactId>velocity</artifactId> - <version>1.6.4</version> + <groupId>org.apache.velocity</groupId> + <artifactId>velocity-engine-core</artifactId> + <version>2.3</version> </dependency> <dependency> <groupId>velocity-tools</groupId> <artifactId>velocity-tools-generic</artifactId> <version>1.2</version> </dependency> - <dependency> - <groupId>c3p0</groupId> - <artifactId>c3p0</artifactId> - <version>0.9.1.2</version> - </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> diff --git a/voila-runtime-rtftemplate/pom.xml b/voila-runtime-rtftemplate/pom.xml index ce8372fd1600d03f345950323d578d1079494b12..6c8681577e453c0d32bd867e8225f1aac44547f6 100644 --- a/voila-runtime-rtftemplate/pom.xml +++ b/voila-runtime-rtftemplate/pom.xml @@ -10,12 +10,6 @@ <name>Java framework Spring RTF Template runtime module</name> <version>1.11-SNAPSHOT</version> <dependencies> - <dependency> - <groupId>commons-beanutils</groupId> - <artifactId>commons-beanutils</artifactId> - <version>1.8.3</version> - <type>jar</type> - </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> diff --git a/voila-runtime-security/pom.xml b/voila-runtime-security/pom.xml index 0b79e8dbe1a45bf65f8e6420adc0eca12e7d777e..b41c0ee317e29a4c3ef56d901ad95ff4223422e3 100644 --- a/voila-runtime-security/pom.xml +++ b/voila-runtime-security/pom.xml @@ -68,12 +68,30 @@ <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> </exclusion> + <exclusion> + <groupId>org.owasp.antisamy</groupId> + <artifactId>antisamy</artifactId> + </exclusion> </exclusions> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> - </dependency> + </dependency><dependency> + <groupId>org.owasp.antisamy</groupId> + <artifactId>antisamy</artifactId> + <version>1.7.5</version> + <exclusions> + <exclusion> + <groupId>xml-apis</groupId> + <artifactId>xml-apis</artifactId> + </exclusion> + <exclusion> + <groupId>xml-apis</groupId> + <artifactId>xml-apis-ext</artifactId> + </exclusion> + </exclusions> +</dependency> </dependencies> </project> \ No newline at end of file diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/csrf/CSRFHandlerInterceptor.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/csrf/CSRFHandlerInterceptor.java index ca5d9ed9ac5ea1c74342787762d658eae1d4143b..03448ccc0d506f933a2049c1820e1bd97f837132 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/csrf/CSRFHandlerInterceptor.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/csrf/CSRFHandlerInterceptor.java @@ -14,6 +14,10 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + +import org.springframework.security.web.csrf.CsrfTokenRepository; +import org.springframework.stereotype.Component; +import org.springframework.security.web.csrf.CsrfToken; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.resource.ResourceHttpRequestHandler; import org.springframework.web.util.HtmlUtils; @@ -37,7 +41,8 @@ import it.mice.voila.runtime.util.UserMessage; * @see CSRFRequestDataValueProcessor * */ -public class CSRFHandlerInterceptor implements HandlerInterceptor{ +//@Component +public class CSRFHandlerInterceptor implements HandlerInterceptor { /** * Default logger. @@ -45,11 +50,21 @@ public class CSRFHandlerInterceptor implements HandlerInterceptor{ private static final Log LOGGER = LogFactory.getLog(CSRFHandlerInterceptor.class); // NOSONAR public static final String SECURITY_CSRF_EXCLUDED_PARAMS = "SECURITY_CSRF_EXCLUDED_PARAMS"; + /** + * The token parameter name + */ + static final String CSRF_PARAM_NAME = "_csrf"; public static Collection<String> EXCLUDED_PARAMS = new ArrayList<String>(); private Collection<String> excludedParameters = new ArrayList<String>(); private boolean disabled = false; + private final CsrfTokenRepository csrfTokenRepository; + + public CSRFHandlerInterceptor(CsrfTokenRepository csrfTokenRepository) { + this.csrfTokenRepository = csrfTokenRepository; + } + public Collection<String> getExcludedParameters() { return excludedParameters; } @@ -98,10 +113,11 @@ public class CSRFHandlerInterceptor implements HandlerInterceptor{ result = true; } else { // This is a POST request - need to check the CSRF token - String sessionToken = CSRFTokenManager.getTokenForSession(request.getSession()); - String requestToken = CSRFTokenManager.getTokenFromRequest(request); - if (sessionToken.equals(requestToken)) { - result = checkParameters(request, response, handler); + CsrfToken csrfToken = csrfTokenRepository.loadToken(request); + String requestToken = request.getParameter(csrfToken.getParameterName()); + + if (csrfToken.getToken().equals(requestToken)) { + return checkParameters(request, response, handler); } else { throw new BusinessException(new UserMessage("error.security.unauthorizedRequest")); //response.sendError(HttpServletResponse.SC_FORBIDDEN, "Bad or missing CSRF value"); @@ -138,7 +154,7 @@ public class CSRFHandlerInterceptor implements HandlerInterceptor{ while (e.hasMoreElements()) { String paramName = e.nextElement(); String paramValue = request.getParameter(paramName); - if (!CSRFTokenManager.CSRF_PARAM_NAME.equals(paramName) && !isExcludedParameter(paramName, params)) { //FIXME + if (!CSRF_PARAM_NAME.equals(paramName) && !isExcludedParameter(paramName, params)) { //FIXME FormField ff = ssb.getFormFields().get(paramName); if (ff == null) { LOGGER.warn("POST request field " + paramName + " not allowed."); diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/csrf/CSRFRequestDataValueProcessor.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/csrf/CSRFRequestDataValueProcessor.java index efa902c4152397caee79f6e5a9b6428d5843cae5..48feab471f2deaa8357d41808bbac3e6857d9742 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/csrf/CSRFRequestDataValueProcessor.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/csrf/CSRFRequestDataValueProcessor.java @@ -10,6 +10,9 @@ import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.web.csrf.CsrfToken; +import org.springframework.security.web.csrf.CsrfTokenRepository; import org.springframework.web.servlet.support.RequestDataValueProcessor; /** @@ -29,7 +32,13 @@ public class CSRFRequestDataValueProcessor implements RequestDataValueProcessor * Default logger. */ private static final Log LOGGER = LogFactory.getLog(CSRFRequestDataValueProcessor.class); // NOSONAR - + + private final CsrfTokenRepository csrfTokenRepository; + + public CSRFRequestDataValueProcessor(CsrfTokenRepository csrfTokenRepository) { + this.csrfTokenRepository = csrfTokenRepository; + } + public String processAction(HttpServletRequest request, String action) { LOGGER.debug("processAction: " + action); return action; @@ -46,7 +55,16 @@ public class CSRFRequestDataValueProcessor implements RequestDataValueProcessor public Map<String, String> getExtraHiddenFields(HttpServletRequest request) { Map<String, String> hiddenFields = new HashMap<String, String>(); - hiddenFields.put(CSRFTokenManager.CSRF_PARAM_NAME, CSRFTokenManager.getTokenForSession(request.getSession())); + // Carica il token CSRF + CsrfToken csrfToken = csrfTokenRepository.loadToken(request); + if (csrfToken == null) { + csrfToken = csrfTokenRepository.generateToken(request); + csrfTokenRepository.saveToken(csrfToken, request, null); + } + + // Aggiungi il token CSRF ai campi nascosti + hiddenFields.put(csrfToken.getParameterName(), csrfToken.getToken()); +// hiddenFields.put(CSRFTokenManager.CSRF_PARAM_NAME, CSRFTokenManager.getTokenForSession(request.getSession())); return hiddenFields; } diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/csrf/CSRFTokenManager.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/csrf/CSRFTokenManager.java index 0872cc8d63e91c6a5233249ffb7eafe3a8a1be65..f8030d298aec3ef46bf5401dabc1c835fc33ee25 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/csrf/CSRFTokenManager.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/csrf/CSRFTokenManager.java @@ -5,6 +5,9 @@ import java.util.UUID; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.web.csrf.CsrfTokenRepository; + /** * A manager for the CSRF token for a given session. The {@link #getTokenForSession(HttpSession)} should used to * obtain the token value for the current session (and this should be the only way to obtain the token value). @@ -16,14 +19,16 @@ final class CSRFTokenManager { /** * The token parameter name */ - static final String CSRF_PARAM_NAME = "CSRFToken"; + static final String CSRF_PARAM_NAME = "_csrf"; /** * The location on the session which stores the token */ private final static String CSRF_TOKEN_FOR_SESSION_ATTR_NAME = CSRFTokenManager.class.getName() + ".tokenval"; + +// private final CsrfTokenRepository tokenRepository; - static String getTokenForSession (HttpSession session) { + static String getTokenForSession(HttpSession session) { String token = null; // I cannot allow more than one token on a session - in the case of two requests trying to // init the token concurrently @@ -46,5 +51,4 @@ final class CSRFTokenManager { return request.getParameter(CSRF_PARAM_NAME); } - private CSRFTokenManager() {}; } diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/ButtonTag.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/ButtonTag.java index 83a7330a25f18e1dc9ead1384b0bac477b288523..c329504b1ceb025cc9031e71687782af10882094 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/ButtonTag.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/ButtonTag.java @@ -117,7 +117,7 @@ public class ButtonTag extends org.springframework.web.servlet.tags.form.ButtonT if (getSkipValidation() == null) { return isRenderAsLink(); } - return ExpressionEvaluationUtils.evaluateBoolean("skipValidation", getSkipValidation()); + return ExpressionEvaluationUtils.evaluateBoolean("skipValidation", getSkipValidation(), this.pageContext); } private boolean isRenderAsLink() throws JspException { diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/CheckBoxTag.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/CheckBoxTag.java index fd1fd7609def8252e51958b66aeaa6e151b85be1..e430a526c04aba93139ce84a2d8341ae04403b61 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/CheckBoxTag.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/CheckBoxTag.java @@ -87,7 +87,7 @@ public class CheckBoxTag extends } private void protectField() throws JspException { - if (!ExpressionEvaluationUtils.evaluateBoolean("forceEdit", getForceEdit())) { + if (!ExpressionEvaluationUtils.evaluateBoolean("forceEdit", getForceEdit(), this.pageContext)) { setReadonly(true); setDisabled(true); setTabindex("-1"); @@ -100,7 +100,7 @@ public class CheckBoxTag extends @Override public int doEndTag() throws JspException { super.doEndTag(); - if (!ExpressionEvaluationUtils.evaluateBoolean("disableDojo", getDisableDojo()) && !TagUtils.isBootstrapTheme()) { + if (!ExpressionEvaluationUtils.evaluateBoolean("disableDojo", getDisableDojo(), this.pageContext) && !TagUtils.isBootstrapTheme()) { writeDojoScript(tagWriter); } return EVAL_PAGE; @@ -113,7 +113,7 @@ public class CheckBoxTag extends script.append("widgetType : 'dijit.form.CheckBox',"); script.append("widgetAttrs : {"); - script.append("required : " + ExpressionEvaluationUtils.evaluateBoolean("required", getRequired())); + script.append("required : " + ExpressionEvaluationUtils.evaluateBoolean("required", getRequired(), this.pageContext)); script.append("}}));"); TagUtils.getCurrentForm(pageContext).addScript(script); diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/InputTag.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/InputTag.java index 9c6850138e76f5a07f636c9e2d2d0b043680c97d..d0f42bc0962bcc94b0bbd2d1d1bd7d464fddb5b0 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/InputTag.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/InputTag.java @@ -278,7 +278,7 @@ public class InputTag extends // } super.writeTagContent(tagWriter); - if (ExpressionEvaluationUtils.evaluateBoolean("disableDojo", getDisableDojo())) { + if (ExpressionEvaluationUtils.evaluateBoolean("disableDojo", getDisableDojo(), this.pageContext)) { return SKIP_BODY; } @@ -357,7 +357,7 @@ public class InputTag extends } private void protectField() throws JspException { - if (!ExpressionEvaluationUtils.evaluateBoolean("forceEdit", getForceEdit())) { + if (!ExpressionEvaluationUtils.evaluateBoolean("forceEdit", getForceEdit(), this.pageContext)) { setReadonly(true); setTabindex("-1"); if (getCssClass() == null || getCssClass().indexOf("protected") == -1) { @@ -483,7 +483,7 @@ public class InputTag extends } private boolean isRequired() throws JspException { - return ExpressionEvaluationUtils.evaluateBoolean("required", getRequired()); + return ExpressionEvaluationUtils.evaluateBoolean("required", getRequired(), this.pageContext); } private void computeOtherConstraints(StringBuffer script) throws JspException { diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/MenuTag.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/MenuTag.java index 46526112e1ba07a4a8be7e37e8872fb9e6180374..aec738372509da08447fa060216c657d2d195096 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/MenuTag.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/MenuTag.java @@ -476,7 +476,7 @@ public class MenuTag extends AbstractFormTag { } tagWriter.appendValue(caption); tagWriter.endTag(); - if (menuItemDefinition.getMenuToShow() != null || ExpressionEvaluationUtils.evaluateBoolean("renderLastBreadcrumbSymbol", getRenderLastBreadcrumbSymbol())) { + if (menuItemDefinition.getMenuToShow() != null || ExpressionEvaluationUtils.evaluateBoolean("renderLastBreadcrumbSymbol", getRenderLastBreadcrumbSymbol(), this.pageContext)) { TagUtils.safeWrite(pageContext, " > "); } if (menuItemDefinition.getMenuToShow() != null) { diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/MessageAlertTag.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/MessageAlertTag.java index 0918f03198458fdb39c539d06d449efce5970af2..fd469980d51b5ff30a9521ca5fcd8e69c31a7dc0 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/MessageAlertTag.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/MessageAlertTag.java @@ -96,7 +96,7 @@ public class MessageAlertTag extends AbstractFormTag { messageList.addAll(storedList); } - if (ExpressionEvaluationUtils.evaluateBoolean("includeValidationMessage", getIncludeValidationMessage())) { + if (ExpressionEvaluationUtils.evaluateBoolean("includeValidationMessage", getIncludeValidationMessage(), this.pageContext)) { messageList.addUserMessages(collectValidationResult()); } else if ((getGenericValidationMessageKey()!=null) && !collectValidationResult().isEmpty()) { messageList.add(new UserMessage(getGenericValidationMessageKey())); diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/PopupTag.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/PopupTag.java index 62dc5d6a7794bb24ba7ee2740ce24d8b4c13f6c7..e328272e595e30ec1e19654a21db00e6e94a66a9 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/PopupTag.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/PopupTag.java @@ -81,7 +81,7 @@ public class PopupTag extends AbstractHtmlElementTag { } if (pageStatus != null) { if (pageStatus.isReadOnly()) { - if (!ExpressionEvaluationUtils.evaluateBoolean("forceEdit", getForceEdit())) { + if (!ExpressionEvaluationUtils.evaluateBoolean("forceEdit", getForceEdit(), this.pageContext)) { pageContext.getRequest().setAttribute("skipElement", Boolean.TRUE); return (SKIP_BODY); } diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/RadioButtonTag.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/RadioButtonTag.java index 7ceabc2764f972dcca8716e28c66b64e786102a7..41982d3620bb85aacbca0f7bd6fe0a5001774fae 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/RadioButtonTag.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/RadioButtonTag.java @@ -109,7 +109,7 @@ public class RadioButtonTag extends } private void protectField() throws JspException { - if (!ExpressionEvaluationUtils.evaluateBoolean("forceEdit", getForceEdit())) { + if (!ExpressionEvaluationUtils.evaluateBoolean("forceEdit", getForceEdit(), this.pageContext)) { setReadonly(true); setDisabled(true); setTabindex("-1"); @@ -122,7 +122,7 @@ public class RadioButtonTag extends @Override public int doEndTag() throws JspException { super.doEndTag(); - if (!ExpressionEvaluationUtils.evaluateBoolean("disableDojo", getDisableDojo()) && !TagUtils.isBootstrapTheme()) { + if (!ExpressionEvaluationUtils.evaluateBoolean("disableDojo", getDisableDojo(), this.pageContext) && !TagUtils.isBootstrapTheme()) { writeDojoScript(tagWriter); } return EVAL_PAGE; @@ -135,7 +135,7 @@ public class RadioButtonTag extends script.append("widgetType : 'dijit.form.RadioButton',"); script.append("widgetAttrs : {"); - script.append("required : " + ExpressionEvaluationUtils.evaluateBoolean("required", getRequired())); + script.append("required : " + ExpressionEvaluationUtils.evaluateBoolean("required", getRequired(), this.pageContext)); script.append("}}));"); TagUtils.getCurrentForm(pageContext).addScript(script); diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/SelectTag.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/SelectTag.java index fc3dd67ce0a291852280e9599443d3e1bbb3bcee..bed101b2028c93ddd280914c19cd41dec15b9d7b 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/SelectTag.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/SelectTag.java @@ -86,7 +86,7 @@ public class SelectTag extends } private void protectField() throws JspException { - if (!ExpressionEvaluationUtils.evaluateBoolean("forceEdit", getForceEdit())) { + if (!ExpressionEvaluationUtils.evaluateBoolean("forceEdit", getForceEdit(), this.pageContext)) { setDisabled(true); } } @@ -94,7 +94,7 @@ public class SelectTag extends @Override public int doEndTag() throws JspException { super.doEndTag(); - if (!ExpressionEvaluationUtils.evaluateBoolean("disableDojo", getDisableDojo()) && !TagUtils.isBootstrapTheme()) { + if (!ExpressionEvaluationUtils.evaluateBoolean("disableDojo", getDisableDojo(), this.pageContext) && !TagUtils.isBootstrapTheme()) { writeDojoScript(tagWriter); } @@ -112,7 +112,7 @@ public class SelectTag extends script.append("widgetType : 'dijit.form.FilteringSelect',"); script.append("widgetAttrs : {"); - script.append("required : " + ExpressionEvaluationUtils.evaluateBoolean("required", getRequired())); + script.append("required : " + ExpressionEvaluationUtils.evaluateBoolean("required", getRequired(), this.pageContext)); script.append("}}));"); TagUtils.getCurrentForm(pageContext).addScript(script); diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/SubmitTag.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/SubmitTag.java index aeb788de17960a4cd705a5d3bfcc7cda9844672d..a132b9644be47c879f1c70016142dd78d1a680c8 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/SubmitTag.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/SubmitTag.java @@ -132,13 +132,13 @@ public class SubmitTag extends private boolean isSkipValidation() throws JspException { if (getSkipValidation() == null) { - return ExpressionEvaluationUtils.evaluateBoolean("renderAsLink", getRenderAsLink()); + return ExpressionEvaluationUtils.evaluateBoolean("renderAsLink", getRenderAsLink(), this.pageContext); } - return ExpressionEvaluationUtils.evaluateBoolean("skipValidation", getSkipValidation()); + return ExpressionEvaluationUtils.evaluateBoolean("skipValidation", getSkipValidation(), this.pageContext); } private boolean isRenderAsLink() throws JspException { - return ExpressionEvaluationUtils.evaluateBoolean("renderAsLink", getRenderAsLink()); + return ExpressionEvaluationUtils.evaluateBoolean("renderAsLink", getRenderAsLink(), this.pageContext); } public String getSurroundWithTag() { @@ -285,11 +285,11 @@ public class SubmitTag extends tagWriter.endTag(); } - if (!ExpressionEvaluationUtils.evaluateBoolean("disableDojo", getDisableDojo()) && !TagUtils.isBootstrapTheme()) { + if (!ExpressionEvaluationUtils.evaluateBoolean("disableDojo", getDisableDojo(), this.pageContext) && !TagUtils.isBootstrapTheme()) { writeDojoScript(tagWriter); } - if (ExpressionEvaluationUtils.evaluateBoolean("ajaxCall", getAjaxCall())) { + if (ExpressionEvaluationUtils.evaluateBoolean("ajaxCall", getAjaxCall(), this.pageContext)) { writeDojoAjaxCall(tagWriter); } diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/TabsTag.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/TabsTag.java index dd7e9656cc90d08a728140bdb506246439734d80..3576178315adcc3c9a94109a33c37fd5ae890664 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/TabsTag.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/TabsTag.java @@ -7,10 +7,14 @@ import it.mice.voila.runtime.web.menu.MenuFilterManager; import java.util.Collection; import java.util.Iterator; +import javax.servlet.RequestDispatcher; +import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.support.WebApplicationContextUtils; import org.springframework.web.servlet.tags.form.AbstractHtmlElementTag; import org.springframework.web.servlet.tags.form.TagWriter; @@ -431,7 +435,11 @@ public class TabsTag extends AbstractHtmlElementTag { private String prepareTabLink(TabInfoBean tabInfoBean, int ctr) { String contextPath = getRequestContext().getContextPath(); - String baseUri = getRequestContext().getRequestUri(); + HttpServletRequest request = + ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()) + .getRequest(); + String uri = (String) request.getAttribute("org.springframework.web.util.UrlPathHelper.PATH"); + String baseUri = contextPath + uri; if (baseUri.lastIndexOf("?") > -1) { baseUri += "&"; } else { diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/TextareaTag.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/TextareaTag.java index b719cc7e7df7f027e80a10dcb98979b9731d5045..558d334dc8f2851b67e42419f1f1633e8c311523 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/TextareaTag.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/taglibs/TextareaTag.java @@ -227,7 +227,7 @@ public class TextareaTag extends } private void protectField() throws JspException { - if (!ExpressionEvaluationUtils.evaluateBoolean("forceEdit", getForceEdit())) { + if (!ExpressionEvaluationUtils.evaluateBoolean("forceEdit", getForceEdit(), this.pageContext)) { setReadonly(true); setTabindex("-1"); if (getCssClass() == null || getCssClass().indexOf("protected") == -1) { @@ -242,7 +242,7 @@ public class TextareaTag extends if (isLeftCharsIndicator()) { writeLeftCharsPart(); } - if (!ExpressionEvaluationUtils.evaluateBoolean("disableDojo", getDisableDojo()) && !TagUtils.isBootstrapTheme()) { + if (!ExpressionEvaluationUtils.evaluateBoolean("disableDojo", getDisableDojo(), this.pageContext) && !TagUtils.isBootstrapTheme()) { writeDojoScript(tagWriter); } if (getUseWysiwyg().startsWith("onButtonSwitch")) { @@ -284,7 +284,7 @@ public class TextareaTag extends script.append("widgetType : 'voila.form.ValidationSimpleTextarea',"); } script.append("widgetAttrs : {"); - script.append("required : " + ExpressionEvaluationUtils.evaluateBoolean("required", getRequired())); + script.append("required : " + ExpressionEvaluationUtils.evaluateBoolean("required", getRequired(), this.pageContext)); script.append(",regExp : \"(.|\\\\s)*\""); if (getMaxLength() != null) { script.append(",maxLength : " + getMaxLength()); @@ -300,7 +300,7 @@ public class TextareaTag extends setRequired("false"); setTabindex(null); setCssClass(null); - setDisabled(true); + setDisabled(false); setFitContent(false); setRequired(null); setForceEdit(null); diff --git a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/util/ExpressionEvaluationUtils.java b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/util/ExpressionEvaluationUtils.java index 3190f2e50138951f4ce19eb41795cdbbdb7719db..2cb8dd06b41c96dbe4a622578b0eee6686a60b0d 100644 --- a/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/util/ExpressionEvaluationUtils.java +++ b/voila-runtime-springmvc/src/main/java/it/mice/voila/runtime/springmvc/util/ExpressionEvaluationUtils.java @@ -251,8 +251,4 @@ public class ExpressionEvaluationUtils { exprValue, resultClass, pageContext.getVariableResolver(), null); } - public static boolean evaluateBoolean(String a, String b) { - return a.equals(b); - } - } diff --git a/voila-runtime-springtest/pom.xml b/voila-runtime-springtest/pom.xml index 7d7202367fd3c60f6a9d502bb1ea033f040e9877..0ab4df46fb284dfc9d1351b5aee79fe4375f8e24 100644 --- a/voila-runtime-springtest/pom.xml +++ b/voila-runtime-springtest/pom.xml @@ -41,17 +41,6 @@ <artifactId>commons-collections</artifactId> </exclusion> </exclusions> - </dependency> - <dependency> - <groupId>org.apache.velocity</groupId> - <artifactId>velocity</artifactId> - <version>1.6.4</version> - <exclusions> - <exclusion> - <groupId>commons-collections</groupId> - <artifactId>commons-collections</artifactId> - </exclusion> - </exclusions> </dependency> </dependencies> </project> \ No newline at end of file diff --git a/voila-runtime-web/src/main/java/it/mice/voila/runtime/web/filter/RuntimeMultipartResolver.java b/voila-runtime-web/src/main/java/it/mice/voila/runtime/web/filter/RuntimeMultipartResolver.java index bc7e0b743b2137b089b3a577c15a5467fa8b9896..6b000fb93a8ce19c761e6eeefd782b13365c4c20 100644 --- a/voila-runtime-web/src/main/java/it/mice/voila/runtime/web/filter/RuntimeMultipartResolver.java +++ b/voila-runtime-web/src/main/java/it/mice/voila/runtime/web/filter/RuntimeMultipartResolver.java @@ -6,12 +6,16 @@ import java.util.Enumeration; import java.util.Iterator; import java.util.Map; +import org.springframework.context.annotation.Bean; import org.springframework.util.Assert; import org.springframework.web.multipart.MultipartException; import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.multipart.commons.CommonsMultipartResolver; import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest; import org.springframework.web.multipart.support.StandardServletMultipartResolver; +import javax.servlet.MultipartConfigElement; +import javax.servlet.ServletRegistration; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper;