1 19 package org.openharmonise.him.metadata.range.swing.relatedevents; 20 21 import java.awt.*; 22 import java.text.*; 23 import java.util.*; 24 import java.util.List ; 25 26 import javax.swing.*; 27 28 import org.openharmonise.him.metadata.range.swing.*; 29 import org.openharmonise.swing.datefield.*; 30 import org.openharmonise.vfs.metadata.*; 31 import org.openharmonise.vfs.metadata.range.*; 32 import org.openharmonise.vfs.metadata.value.*; 33 34 35 41 public class RelatedEventDate extends AbstractRangeDisplay implements DateFieldListener, RangeDisplay, LayoutManager { 42 private static final String XSD_DATE_FORMAT = "yyyy-MM-dd G"; 43 private SimpleDateFormat df = 44 new java.text.SimpleDateFormat (XSD_DATE_FORMAT); 45 46 private String m_sDateFormat = "yyyy/MM/dd G"; 47 private JDateField m_dateField = null; 48 49 52 public RelatedEventDate(PropertyInstance propInstance) { 53 super(propInstance); 54 setup(); 55 } 56 57 60 private void setup() { 61 this.setLayout(this); 62 63 DateRange range = 64 (DateRange) this.getPropertyInstance().getDefinition().getRange(); 65 66 PropertyInstance propInst = getPropertyInstance(); 67 68 List vals = propInst.getValues(); 69 70 Date dt = null; 71 72 if(vals.size() > 0) { 73 String sDate = ((DateValue) vals.get(0)).getValue(); 74 75 try { 76 dt = df.parse(sDate); 77 } catch (ParseException e) { 78 e.printStackTrace(); 79 } 80 } else { 81 } 82 83 this.m_dateField = new JDateField(XSD_DATE_FORMAT); 84 if(dt!=null) { 85 this.m_dateField.setDate(dt); 86 } 87 this.m_dateField.setMinimumDate(range.getMinimum()); 88 this.m_dateField.setMaximumDate(range.getMaximum()); 89 this.m_dateField.addDateFieldListener(this); 90 91 this.add(m_dateField); 92 } 93 94 97 public void layoutContainer(Container arg0) { 98 this.m_dateField.setSize(this.m_dateField.getPreferredSize()); 99 this.m_dateField.setLocation(0, 0); 100 } 101 102 105 public boolean isMetadataValid() { 106 boolean bIsValid = true; 107 PropertyInstance propInst = getPropertyInstance(); 108 109 List vals = propInst.getValues(); 110 111 if(vals != null && vals.size() > 0) { 112 try { 113 Date dt = df.parse(((DateValue)vals.get(0)).getValue()); 114 Date now = new Date(); 115 116 if(dt.after(now)) { 117 bIsValid = false; 118 } 119 } catch (ParseException e) { 120 e.printStackTrace(); 121 } 122 } 123 124 if(bIsValid == true) { 125 Property prop = getPropertyInstance().getDefinition(); 126 127 DateRange range = (DateRange)prop.getRange(); 128 129 bIsValid = range.validate(propInst.getValues()).isValid(); 130 } 131 132 if(bIsValid == false) { 133 m_dateField.setForeground(Color.RED); 134 135 } else if(m_dateField.hasValue() == false) { 136 m_dateField.setForeground(Color.BLACK); 137 } 138 139 return bIsValid; 140 } 141 142 145 public JPanel getPanel() { 146 147 return this; 148 } 149 150 153 public Dimension getPreferredSize() { 154 return m_dateField.getPreferredSize(); 155 } 156 157 protected String getValue() { 158 SimpleDateFormat dtDF = new SimpleDateFormat( "yyyy-MM-dd G" ); 159 String sValue = ""; 160 try { 161 sValue = dtDF.format( this.m_dateField.getDate() ); 162 } catch(Exception e) { 163 e.printStackTrace(); 164 } 165 return sValue.trim(); 166 } 167 168 171 public void removeLayoutComponent(Component arg0) { 172 } 173 174 177 public void addLayoutComponent(String arg0, Component arg1) { 178 } 179 180 183 public Dimension minimumLayoutSize(Container arg0) { 184 return this.getPreferredSize(); 185 } 186 187 190 public Dimension preferredLayoutSize(Container arg0) { 191 return this.getPreferredSize(); 192 } 193 194 197 public void validationFailed(JDateField source, int nReason) { 198 m_dateField.setForeground(Color.RED); 199 } 200 201 204 public void valueChanged(JDateField source) { 205 DateValue val = (DateValue)getPropertyInstance().getNewValueInstance(); 206 val.setValue(getValue()); 207 this.getPropertyInstance().setValue(val); 208 firePropertyChange(RelatedEventValueDisplay.PROPERTY_METADATA_CHANGE, null, null); 209 m_dateField.setForeground(Color.BLACK); 210 } 211 212 } 213 | Popular Tags |