/** * @param obj ValueObject related to the current row * @param colIndex TableModel column index * @return Object contained into the TableModel at the specified column and ValueObject */ public final Object getField(ValueObject obj, int colIndex) { try { Method[] m = (Method[]) voGetterMethods.get(getFieldName(colIndex)); if (m == null) Logger.error( this.getClass().getName(), "getField", "No getter method for index " + colIndex + " and attribute name '" + getFieldName(colIndex) + "'.", null); for (int i = 0; i < m.length - 1; i++) { obj = (ValueObject) m[i].invoke(obj, new Object[0]); if (obj == null) { if (grids.getGridControl() == null || !grids.getGridControl().isCreateInnerVO()) return null; else obj = (ValueObject) m[i].getReturnType().newInstance(); } } return m[m.length - 1].invoke(obj, new Object[0]); } catch (Exception ex) { ex.printStackTrace(); return null; } }
public final Class getColumnClass(int columnIndex) { try { Method[] m = (Method[]) voGetterMethods.get(attributeNames[columnIndex]); return m[m.length - 1].getReturnType(); } catch (Exception ex) { ex.printStackTrace(); return String.class; } }
/** * @param fieldName attribute name * @return int column index */ public final int getFieldIndex(String fieldName) { Integer index = (Integer) reverseIndexes.get(fieldName); if (index != null) return index.intValue(); Logger.error( this.getClass().getName(), "getFieldIndex", "The column '" + fieldName + "' does not exist", null); return (-1); }
/** * @param colIndex TableModel column index * @return TableModel column name */ public final String getFieldName(int colIndex) { String attributeName = (String) indexes.get(new Integer(colIndex)); if (attributeName == null) Logger.error( this.getClass().getName(), "getFieldName", "No attribute found for index " + colIndex + ".", null); return attributeName; }
public final Object getValueAt(int rowIndex, int colIndex) { try { Method[] m = (Method[]) voGetterMethods.get(attributeNames[colIndex]); Object obj = valueObjects.get(rowIndex); for (int i = 0; i < m.length - 1; i++) { obj = (ValueObject) m[i].invoke(obj, new Object[0]); if (obj == null) { return null; } } return m[m.length - 1].invoke(obj, new Object[0]); } catch (Exception ex) { ex.printStackTrace(); return null; } }
/** * @param colIndex TableModel column index * @return column type */ public final Class getFieldClass(int colIndex) { try { Method[] m = (Method[]) voGetterMethods.get(getFieldName(colIndex)); if (m == null) Logger.error( this.getClass().getName(), "getField", "No getter method for index " + colIndex + " and attribute name '" + getFieldName(colIndex) + "'.", null); return m[m.length - 1].getReturnType(); } catch (Exception ex) { ex.printStackTrace(); return String.class; } }
/** * Analyze class fields and fill in "voSetterMethods","voGetterMethods","indexes",reverseIndexes" * attributes. * * @param prefix e.g. "attrx.attry." * @param parentMethods getter methods of parent v.o. * @param classType class to analyze */ private void analyzeClassFields( Hashtable vosAlreadyProcessed, String prefix, Method[] parentMethods, Class classType) { try { Integer num = (Integer) vosAlreadyProcessed.get(classType); if (num == null) num = new Integer(0); num = new Integer(num.intValue() + 1); if (num.intValue() > 10) return; vosAlreadyProcessed.put(classType, num); // retrieve all getter and setter methods defined in the specified value object... String attributeName = null; Method[] methods = classType.getMethods(); String aName = null; for (int i = 0; i < methods.length; i++) { attributeName = methods[i].getName(); if (attributeName.startsWith("get") && methods[i].getParameterTypes().length == 0 && ValueObject.class.isAssignableFrom(methods[i].getReturnType())) { aName = getAttributeName(attributeName, classType); Method[] newparentMethods = new Method[parentMethods.length + 1]; System.arraycopy(parentMethods, 0, newparentMethods, 0, parentMethods.length); newparentMethods[parentMethods.length] = methods[i]; analyzeClassFields( vosAlreadyProcessed, prefix + aName + ".", newparentMethods, methods[i].getReturnType()); } if (attributeName.startsWith("get") && methods[i].getParameterTypes().length == 0 && (methods[i].getReturnType().equals(String.class) || methods[i].getReturnType().equals(Long.class) || methods[i].getReturnType().equals(Long.TYPE) || methods[i].getReturnType().equals(Float.class) || methods[i].getReturnType().equals(Float.TYPE) || methods[i].getReturnType().equals(Short.class) || methods[i].getReturnType().equals(Short.TYPE) || methods[i].getReturnType().equals(Double.class) || methods[i].getReturnType().equals(Double.TYPE) || methods[i].getReturnType().equals(BigDecimal.class) || methods[i].getReturnType().equals(java.util.Date.class) || methods[i].getReturnType().equals(java.sql.Date.class) || methods[i].getReturnType().equals(java.sql.Timestamp.class) || methods[i].getReturnType().equals(Integer.class) || methods[i].getReturnType().equals(Integer.TYPE) || methods[i].getReturnType().equals(Character.class) || methods[i].getReturnType().equals(Boolean.class) || methods[i].getReturnType().equals(boolean.class) || methods[i].getReturnType().equals(ImageIcon.class) || methods[i].getReturnType().equals(Icon.class) || methods[i].getReturnType().equals(byte[].class) || methods[i].getReturnType().equals(Object.class) || ValueObject.class.isAssignableFrom(methods[i].getReturnType()))) { attributeName = getAttributeName(attributeName, classType); // try { // if // (classType.getMethod("set"+attributeName.substring(0,1).toUpperCase()+attributeName.substring(1),new Class[]{methods[i].getReturnType()})!=null) Method[] newparentMethods = new Method[parentMethods.length + 1]; System.arraycopy(parentMethods, 0, newparentMethods, 0, parentMethods.length); newparentMethods[parentMethods.length] = methods[i]; voGetterMethods.put(prefix + attributeName, newparentMethods); // } catch (NoSuchMethodException ex) { // } } else if (attributeName.startsWith("is") && methods[i].getParameterTypes().length == 0 && (methods[i].getReturnType().equals(Boolean.class) || methods[i].getReturnType().equals(boolean.class))) { attributeName = getAttributeName(attributeName, classType); Method[] newparentMethods = new Method[parentMethods.length + 1]; System.arraycopy(parentMethods, 0, newparentMethods, 0, parentMethods.length); newparentMethods[parentMethods.length] = methods[i]; voGetterMethods.put(prefix + attributeName, newparentMethods); } else if (attributeName.startsWith("set") && methods[i].getParameterTypes().length == 1) { attributeName = getAttributeName(attributeName, classType); try { if (classType.getMethod( "get" + attributeName.substring(0, 1).toUpperCase() + attributeName.substring(1), new Class[0]) != null) { Method[] newparentMethods = new Method[parentMethods.length + 1]; System.arraycopy(parentMethods, 0, newparentMethods, 0, parentMethods.length); newparentMethods[parentMethods.length] = methods[i]; voSetterMethods.put(prefix + attributeName, newparentMethods); } } catch (NoSuchMethodException ex) { try { if (classType.getMethod( "is" + attributeName.substring(0, 1).toUpperCase() + attributeName.substring(1), new Class[0]) != null) { Method[] newparentMethods = new Method[parentMethods.length + 1]; System.arraycopy(parentMethods, 0, newparentMethods, 0, parentMethods.length); newparentMethods[parentMethods.length] = methods[i]; voSetterMethods.put(prefix + attributeName, newparentMethods); } } catch (NoSuchMethodException exx) { } } } } // fill in indexes with the colProperties indexes first; after them, it will be added the // other indexes (of attributes not mapped with grid column...) HashSet alreadyAdded = new HashSet(); int i = 0; for (i = 0; i < attributeNames.length; i++) { reverseIndexes.put(attributeNames[i], new Integer(i)); alreadyAdded.add(attributeNames[i]); } Enumeration en = voGetterMethods.keys(); while (en.hasMoreElements()) { attributeName = en.nextElement().toString(); if (!alreadyAdded.contains(attributeName)) { reverseIndexes.put(attributeName, new Integer(i)); i++; } } } catch (Exception ex) { ex.printStackTrace(); } }
/** This method retrieves the AWT Color representation from the colour hash table */ private final Color getAWTColor(int index, Color deflt) { HSSFColor clr = (HSSFColor) colors.get(Integer.valueOf(index)); if (clr == null) return deflt; return getAWTColor(clr); }
public void chefUpdated(Chef chef) { Integer row = (Integer) (_chefsByName.get(chef.getName())); int index = row.intValue(); fireTableRowsUpdated(index, index); }
/** * @param obj ValueObject where updating the value for the specified attribute (identified by * colunm index) * @param attributeName attribute name * @param value new Object to set onto ValueObject */ public final void setField(ValueObject obj, String attributeName, Object value) { try { Method[] getter = ((Method[]) voGetterMethods.get(attributeName)); Method[] setter = ((Method[]) voSetterMethods.get(attributeName)); if (getter == null) Logger.error( this.getClass().getName(), "setField", "No getter method for attribute name '" + attributeName + "'.", null); if (setter == null) Logger.error( this.getClass().getName(), "setField", "No setter method for attribute name '" + attributeName + "'.", null); if (value != null && (value instanceof Number || !value.equals("") && value instanceof String)) { if (!getter[getter.length - 1].getReturnType().equals(value.getClass())) { Class attrType = getter[getter.length - 1].getReturnType(); if (attrType.equals(Integer.class) || attrType.equals(Integer.TYPE)) value = new Integer(Double.valueOf(value.toString()).intValue()); else if (attrType.equals(Double.class) || attrType.equals(Double.TYPE)) value = new Double(value.toString()); else if (attrType.equals(BigDecimal.class)) value = new BigDecimal(value.toString()); else if (attrType.equals(Long.class) || attrType.equals(Long.TYPE)) value = new Long(Double.valueOf(value.toString()).longValue()); else if (attrType.equals(Short.class) || attrType.equals(Short.TYPE)) value = new Short(Double.valueOf(value.toString()).shortValue()); else if (attrType.equals(Float.class) || attrType.equals(Float.TYPE)) value = new Float(Double.valueOf(value.toString()).floatValue()); } } else if (value != null && value.equals("")) { if (!getter[getter.length - 1].getReturnType().equals(value.getClass())) value = null; } // test date compatibility... if (value != null && value.getClass().equals(java.util.Date.class)) { if (setter[setter.length - 1].getParameterTypes()[0].equals(java.sql.Date.class)) value = new java.sql.Date(((java.util.Date) value).getTime()); else if (setter[setter.length - 1].getParameterTypes()[0].equals(java.sql.Timestamp.class)) value = new java.sql.Timestamp(((java.util.Date) value).getTime()); } // retrieve inner v.o.: if not present then maybe create it, according to "createInnerVO" // property... Method[] m = (Method[]) voGetterMethods.get(attributeName); if (m == null) Logger.error( this.getClass().getName(), "setField", "No getter method for attribute name '" + attributeName + "'.", null); Object oldObj = obj; String auxAttr; for (int i = 0; i < m.length - 1; i++) { oldObj = obj; obj = (ValueObject) m[i].invoke(oldObj, new Object[0]); if (obj == null) { if (grids.getGridControl() == null || !grids.getGridControl().isCreateInnerVO()) return; else { obj = (ValueObject) m[i].getReturnType().newInstance(); String[] attrs = attributeName.split("\\."); auxAttr = ""; for (int k = 0; k <= i; k++) auxAttr += attrs[k] + "."; auxAttr = auxAttr.substring(0, auxAttr.length() - 1); Method aux = ((Method[]) voSetterMethods.get(auxAttr))[i]; aux.invoke(oldObj, new Object[] {obj}); } } } // avoid to set null for primitive types! if (value == null && setter[setter.length - 1].getParameterTypes()[0].equals(Long.TYPE)) setter[setter.length - 1].invoke(obj, new Object[] {new Long(0)}); if (value == null && setter[setter.length - 1].getParameterTypes()[0].equals(Integer.TYPE)) setter[setter.length - 1].invoke(obj, new Object[] {new Integer(0)}); if (value == null && setter[setter.length - 1].getParameterTypes()[0].equals(Short.TYPE)) setter[setter.length - 1].invoke(obj, new Object[] {new Short((short) 0)}); if (value == null && setter[setter.length - 1].getParameterTypes()[0].equals(Float.TYPE)) setter[setter.length - 1].invoke(obj, new Object[] {new Float(0)}); if (value == null && setter[setter.length - 1].getParameterTypes()[0].equals(Double.TYPE)) setter[setter.length - 1].invoke(obj, new Object[] {new Double(0)}); if (value == null && setter[setter.length - 1].getParameterTypes()[0].equals(Boolean.TYPE)) setter[setter.length - 1].invoke(obj, new Object[] {Boolean.FALSE}); else setter[setter.length - 1].invoke(obj, new Object[] {value}); } catch (Exception ex) { ex.printStackTrace(); } }
/** Runs this thread. */ public void run() { CommonFileChooser file_chooser = new CommonFileChooser(); file_chooser.setDialogTitle("Choose a directory."); file_chooser.setMultiSelectionEnabled(false); file_chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); if (file_chooser.showSaveDialog(pane) == JFileChooser.APPROVE_OPTION) { try { File directory = file_chooser.getSelectedFile(); directory.mkdirs(); // Outputs the variability XML file. String path = FileManager.unitePath(directory.getAbsolutePath(), "package.xml"); File file = new File(path); if (file.exists()) { String message = "Overwrite to " + file.getPath() + " ?"; if (0 != JOptionPane.showConfirmDialog( pane, message, "Confirmation", JOptionPane.YES_NO_OPTION)) { return; } } XmlVariabilityHolder holder = new XmlVariabilityHolder(); Variability[] records = getSelectedRecords(); for (int i = 0; i < records.length; i++) { XmlVariability variability = new XmlVariability(records[i]); holder.addVariability(variability); } holder.write(file); // Copies the report XML document files. Hashtable hash_xml = new Hashtable(); for (int i = 0; i < records.length; i++) { XmlMagRecord[] mag_records = records[i].getMagnitudeRecords(); for (int j = 0; j < mag_records.length; j++) hash_xml.put(mag_records[j].getImageXmlPath(), this); } Vector failed_list = new Vector(); Enumeration keys = hash_xml.keys(); while (keys.hasMoreElements()) { String xml_path = (String) keys.nextElement(); try { File src_file = desktop.getFileManager().newFile(xml_path); File dst_file = new File(FileManager.unitePath(directory.getAbsolutePath(), xml_path)); if (dst_file.exists() == false) FileManager.copy(src_file, dst_file); } catch (Exception exception) { failed_list.addElement(xml_path); } } if (failed_list.size() > 0) { String header = "Failed to copy the following XML files:"; MessagesDialog dialog = new MessagesDialog(header, failed_list); dialog.show(pane, "Error", JOptionPane.ERROR_MESSAGE); } // Copies the image files. failed_list = new Vector(); keys = hash_xml.keys(); while (keys.hasMoreElements()) { path = (String) keys.nextElement(); try { XmlInformation info = XmlReport.readInformation(desktop.getFileManager().newFile(path)); path = info.getImage().getContent(); File src_file = desktop.getFileManager().newFile(path); File dst_file = new File(FileManager.unitePath(directory.getAbsolutePath(), path)); if (dst_file.exists() == false) FileManager.copy(src_file, dst_file); } catch (Exception exception) { failed_list.addElement(path); } } if (failed_list.size() > 0) { String header = "Failed to copy the following image files:"; MessagesDialog dialog = new MessagesDialog(header, failed_list); dialog.show(pane, "Error", JOptionPane.ERROR_MESSAGE); } // Creates the sub catalog database. try { DiskFileSystem file_system = new DiskFileSystem( new File( directory.getAbsolutePath(), net.aerith.misao.pixy.Properties.getDatabaseDirectoryName())); CatalogDBManager new_manager = new GlobalDBManager(file_system).getCatalogDBManager(); Hashtable hash_stars = new Hashtable(); for (int i = 0; i < records.length; i++) { CatalogStar star = records[i].getStar(); CatalogDBReader reader = new CatalogDBReader(desktop.getDBManager().getCatalogDBManager()); StarList list = reader.read(star.getCoor(), 0.5); for (int j = 0; j < list.size(); j++) { CatalogStar s = (CatalogStar) list.elementAt(j); hash_stars.put(s.getOutputString(), s); } } keys = hash_stars.keys(); while (keys.hasMoreElements()) { String string = (String) keys.nextElement(); CatalogStar star = (CatalogStar) hash_stars.get(string); new_manager.addElement(star); } } catch (Exception exception) { String message = "Failed to create sub catalog database."; JOptionPane.showMessageDialog(pane, message, "Error", JOptionPane.ERROR_MESSAGE); } String message = "Completed."; JOptionPane.showMessageDialog(pane, message); } catch (IOException exception) { String message = "Failed."; JOptionPane.showMessageDialog(pane, message, "Error", JOptionPane.ERROR_MESSAGE); } } }