/* * Copyright 2004-2007 IDCA. All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the * following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and * the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions * and the following disclaimer in the documentation and/or other materials provided with the * distribution. * * THIS SOFTWARE IS PROVIDED BY IDCA AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL IDCA OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation are those of the authors and * should not be interpreted as representing official policies, either expressed or implied, of IDCA. */ package com.idcanet.vasc.impl; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.hibernate.validator.ClassValidator; import org.hibernate.validator.InvalidValue; import com.idcanet.vasc.annotations.VascAnnotationParser; import com.idcanet.vasc.core.VascEntry; import com.idcanet.vasc.core.VascEntryField; import com.idcanet.vasc.core.VascFrontendHelper; import com.idcanet.vasc.core.entry.VascEntryEventListener; import com.idcanet.vasc.core.entry.VascEntryEventListener.VascEventType; /** * * @author Willem Cazander * @version 1.0 Apr 28, 2007 */ public class DefaultVascFrontendHelper implements VascFrontendHelper { private Logger logger = null; //private List<VascEventListener> eventListeners = null; //private List<VascExceptionListener> exceptionListeners = null; public DefaultVascFrontendHelper() { logger = Logger.getLogger(DefaultVascFrontendHelper.class.getName()); //eventListeners = new ArrayList<VascEventListener>(2); //exceptionListeners = new ArrayList<VascExceptionListener>(2); } /** * @see com.idcanet.vasc.core.VascFrontendHelper#addEventListener(com.idcanet.vasc.core.entry.VascEntryEventListener) */ public void addEventListener(VascEntryEventListener e) { // TODO Auto-generated method stub } /** * @see com.idcanet.vasc.core.VascFrontendHelper#addExceptionListener(com.idcanet.vasc.core.entry.VascEntryEventListener) */ public void addExceptionListener(VascEntryEventListener listener) { } /** * @see com.idcanet.vasc.core.VascFrontendHelper#fireVascEvent(com.idcanet.vasc.core.entry.VascEntryEventListener.VascEventType, java.lang.Object) */ public void fireVascEvent(VascEventType type, Object data) { } /** * @see com.idcanet.vasc.core.VascFrontendHelper#getTotalColumnsWidth(com.idcanet.vasc.core.VascEntry) */ public Integer getTotalColumnsWidth(VascEntry entry) { int result = 0; for(VascEntryField c:entry.getVascEntryFields()) { if(c.getSizeList()==null) { Logger.getLogger(VascEntry.class.getName()).finer("Column no size: "+c.getName()); } else { result+=c.getSizeList(); } } return result; } /** * @see com.idcanet.vasc.core.VascFrontendHelper#handleException(java.lang.Exception, com.idcanet.vasc.core.VascEntry) */ public void handleException(Exception e, VascEntry table) { e.printStackTrace(); /* if (exceptionListeners.isEmpty()) { Logger.getLogger(DefaultVascTableController.class.getName()).log(Level.WARNING,e.getMessage(),e); return; } for(VascExceptionListener ee:exceptionListeners) { try { ee.handleException(e, table); } catch (Exception eee) { Logger.getLogger(DefaultVascTableController.class.getName()).log(Level.WARNING,"Error in ExceptionListener: "+eee.getMessage(),eee); } } */ } /** * @see com.idcanet.vasc.core.VascFrontendHelper#initEditObject(com.idcanet.vasc.core.VascEntry, java.lang.Object) */ public Object initEditObject(VascEntry entry, Object object) throws Exception { if (object!=null) { return object; } object = entry.getVascFrontendData().getVascBackend().provideVascEntryRecordCreator(entry).newRecord(entry); //fireVascEvent(VascEventListener.VascEventType.BEAN_INIT, object); return object; } /** * @see com.idcanet.vasc.core.VascFrontendHelper#initEditObjectColumn(com.idcanet.vasc.core.VascEntryField, java.lang.Object) */ public void initEditObjectColumn(VascEntryField field, Object bean) throws Exception { Object value = field.getVascEntryFieldValue().getValue(field, bean); if(value==null & field.getDefaultValue()!=null) { try { logger.finer("Setting default value for: "+field.getName()+" def: "+field.getDefaultValue()); field.getVascEntryFieldValue().setValue(field, bean, field.getDefaultValue()); } catch (Exception e) { logger.log(Level.WARNING,"Error in setting default value: '"+field.getDefaultValue()+"' error: "+e.getMessage(),e); } } } /** * @see com.idcanet.vasc.core.VascFrontendHelper#mergeObject(com.idcanet.vasc.core.VascEntry, java.lang.Object) */ public Object mergeObject(VascEntry entry, Object object) { Object result = null; try { object = entry.getVascFrontendData().getVascBackend().merge(object); //fireVascEvent(VascEventListener.VascEventType.BEAN_MERGE,object); // todo: make faster // add to table at position old old object // then remove old object // send refresh refreshData(entry); } catch (Exception e) { handleException(e, entry); } return result; } /** * @see com.idcanet.vasc.core.VascFrontendHelper#refreshData(com.idcanet.vasc.core.VascEntry) */ public void refreshData(VascEntry entry) throws Exception { entry.getVascFrontendData().setEntryDataObject(null); entry.getVascFrontendData().setEntryDataList(entry.getVascFrontendData().getVascBackend().execute()); //fireVascEvent(VascEventListener.VascEventType.DATA_UPDATE, null); } /** * @see com.idcanet.vasc.core.VascFrontendHelper#removeEventListener(com.idcanet.vasc.core.entry.VascEntryEventListener) */ public void removeEventListener(VascEntryEventListener e) { // TODO Auto-generated method stub } /** * @see com.idcanet.vasc.core.VascFrontendHelper#removeExceptionListener(com.idcanet.vasc.core.entry.VascEntryEventListener) */ public void removeExceptionListener(VascEntryEventListener listener) { // TODO Auto-generated method stub } /** * @see com.idcanet.vasc.core.VascFrontendHelper#setUIComponentsBeanErrors(com.idcanet.vasc.core.VascEntry, java.lang.Object) */ public boolean setUIComponentsBeanErrors(VascEntry entry, Object bean) { boolean error = false; if(bean==null) { logger.finest("No bean to check."); return true; // nothing to check } ClassValidator val = new ClassValidator(bean.getClass()); InvalidValue[] ival = val.getInvalidValues(bean); logger.fine("Got invaliled value: "+ival.length); for(VascEntryField col:entry.getVascEntryFields()) { /* if(col.getVascUIComponent()==null) { continue; // we only DISPLAY user input errors !! } if (col instanceof VascAnnotationTableColumn) { VascAnnotationTableColumn column = (VascAnnotationTableColumn)col; InvalidValue iv = findInvalidValueByProperty(ival,column.getBeanProperty()); if(iv==null) { column.getVascUIComponent().setErrorText(null); continue; // no error on this property } error = true; column.getVascUIComponent().setErrorText(iv.getMessage()); } */ } logger.finest("Checked for errors: "+error); return error; } private InvalidValue findInvalidValueByProperty(InvalidValue[] ival,String property) { for(InvalidValue iv:ival) { if(iv.getPropertyName().equals(property)) { return iv; } } return null; } /* public void finalizeVascColumns(VascTable table) throws Exception { VascAnnotationParser vap = new VascAnnotationParser(); for(VascTableColumn c:table.getTableColumns()) { if (c instanceof VascAnnotationTableColumn) { VascAnnotationTableColumn column = (VascAnnotationTableColumn)c; if (c.getName()==null) { c.setName(vap.getVascNameKey(table.getVascRecordCreator().getObjectClass(), column.getBeanProperty())); } if (c.getToolTip()==null) { c.setToolTip(vap.getVascToolTipKey(table.getVascRecordCreator().getObjectClass(), column.getBeanProperty())); } if (c.getDefaultValue()==null) { c.setDefaultValue(vap.getVascDefaultValue(table.getVascRecordCreator().getObjectClass(), column.getBeanProperty())); } if (c.getWidth()==null) { Object obj = vap.getVascColumnWidth(table.getVascRecordCreator().getObjectClass(), column.getBeanProperty()); if (obj instanceof Integer) { c.setWidth((Integer)obj); } c.setWidth(100); // get KEY } if (c.getHelpId()==null) { c.setHelpId(vap.getVascHelpId(table.getVascRecordCreator().getObjectClass(), column.getBeanProperty())); } if (c.getVascColumnValue()==null) { c.setVascColumnValue(new BeanPropertyVascColumnValue(column.getBeanProperty())); } if (c.getImage()==null) { c.setImage(vap.getVascImage(table.getVascRecordCreator().getObjectClass(),column.getBeanProperty())); } } if (c.getVascUIComponent()==null) { if (c.getDefaultValue() instanceof Boolean) { c.setVascUIComponent(new VascToggle()); } else if (c.getDefaultValue() instanceof Date) { c.setVascUIComponent(new VascDate()); } else { c.setVascUIComponent(new VascTextField()); } } if (c.getVascColumnRenderer()==null) { //c.setVascColumnRenderer(new DefaultVascColumnRenderer()); } } } public void addEventListener(VascEventListener e) { eventListeners.add(e); } public void removeEventListener(VascEventListener e) { eventListeners.remove(e); } public void fireVascEvent(VascEventListener.VascEventType type,Object data) { for(VascEventListener e:eventListeners) { e.vascEvent(type, data); } } public void addExceptionListener(VascExceptionListener listener) { exceptionListeners.add(listener); } public void removeExceptionListener(VascExceptionListener listener) { exceptionListeners.remove(listener); } */ }