1 19 package org.openharmonise.him.metadata.range.swing.datetimehandling; 20 21 import java.awt.*; 22 import java.text.*; 23 import java.util.*; 24 25 import javax.swing.*; 26 27 import org.openharmonise.him.metadata.range.swing.*; 28 import org.openharmonise.swing.datefield.*; 29 import org.openharmonise.vfs.gui.*; 30 import org.openharmonise.vfs.metadata.*; 31 import org.openharmonise.vfs.metadata.range.*; 32 33 34 38 public class DateTimeValuePanel 39 extends AbstractRangeDisplay 40 implements RangeDisplay, LayoutManager, DateFieldListener { 41 42 private static final String XSD_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss G"; 43 private SimpleDateFormat df = 44 new java.text.SimpleDateFormat (XSD_DATE_FORMAT); 45 46 protected int m_nHeight = 10; 47 48 private String m_sPreviousText = ""; 49 50 protected WarningsLabel m_warnings = null; 51 52 protected JLabel m_errorLabel = null; 53 54 private String m_sValue = ""; 55 56 private DateTimeRangeDisplay m_display = null; 57 58 private JDateField m_dateField = null; 59 60 63 public DateTimeValuePanel( 64 DateTimeRangeDisplay display, 65 PropertyInstance propInstance, 66 String sValue) { 67 super(propInstance); 68 this.m_display = display; 69 this.m_sValue = sValue; 70 this.setup(); 71 } 72 73 76 public JPanel getPanel() { 77 return null; 78 } 79 80 public void setup() { 81 this.setLayout(this); 82 DateTimeRange range = 83 (DateTimeRange) this 84 .getPropertyInstance() 85 .getDefinition() 86 .getRange(); 87 88 String sWarning = ""; 89 90 this.m_errorLabel = new JLabel(); 91 this.m_errorLabel.setIcon( 92 IconManager.getInstance().getIcon("16-message-confirm.gif")); 93 this.add(this.m_errorLabel); 94 95 if (range.getMinimum() != null && range.getMaximum() != null) { 96 sWarning = 97 "Please enter a date (ccyy/MM/dd HH:mm) between {" 98 + this.df.format(range.getMinimum()) 99 + "} and {" 100 + this.df.format(range.getMaximum()) 101 + "}."; 102 } else if (range.getMaximum() != null) { 103 sWarning = 104 "Please enter a date (ccyy/MM/dd HH:mm) before {" 105 + this.df.format(range.getMaximum()) 106 + "}."; 107 } else if (range.getMinimum() != null) { 108 sWarning = 109 "Please enter a date (ccyy/MM/dd HH:mm) after {" 110 + this.df.format(range.getMinimum()) 111 + "}."; 112 } else { 113 sWarning = "Please enter a date (ccyy/MM/dd HH:mm)."; 114 } 115 116 m_warnings = new WarningsLabel(sWarning); 117 this.add(m_warnings); 118 119 this.m_dateField = new JDateField("yyyy/MM/dd HH:mm G"); 120 this.m_dateField.setBorder( BorderFactory.createEtchedBorder() ); 121 this.m_dateField.addDateFieldListener(this); 122 this.m_dateField.setMinimumDate(range.getMinimum()); 123 this.m_dateField.setMaximumDate(range.getMaximum()); 124 if(this.m_sValue!=null && !this.m_sValue.equals("")) { 125 Date dtValue = null; 126 try { 127 dtValue = df.parse(this.m_sValue); 128 } catch (Exception e) { 129 } 131 if(dtValue!=null) { 132 this.m_dateField.setDate(dtValue); 133 } 134 } 135 this.add(this.m_dateField); 136 } 137 138 141 public Dimension getPreferredSize() { 142 this.layoutContainer(null); 143 int nWidth = this.m_warnings.getSize().width + this.m_warnings.getLocation().x; 144 if(this.m_dateField.getSize().width>nWidth) { 145 nWidth =this.m_dateField.getSize().width; 146 } 147 nWidth = nWidth + 60; 148 149 return new Dimension(nWidth, m_nHeight); 150 } 151 152 155 public void removeLayoutComponent(Component arg0) { 156 } 158 159 162 public void layoutContainer(Container arg0) { 163 int nWidth = this.getParent().getWidth() - 18; 164 165 m_warnings.setSize(m_warnings.getPreferredSize()); 166 m_warnings.setLocation(20, 0); 167 168 m_nHeight = m_warnings.getPreferredSize().height + 10; 169 170 int nXpos = 20; 171 172 173 this.m_dateField.setSize(this.m_dateField.getPreferredSize()); 174 this.m_dateField.setLocation(nXpos, m_nHeight); 175 nXpos = nXpos + this.m_dateField.getSize().width + 10; 176 m_nHeight = m_nHeight + m_dateField.getPreferredSize().height + 10; 177 this.m_errorLabel.setLocation(0,0); 178 this.m_errorLabel.setSize(15, 15); 179 this.repaint(); 180 } 181 182 185 public void addLayoutComponent(String arg0, Component arg1) { 186 } 188 189 192 public Dimension minimumLayoutSize(Container arg0) { 193 return this.getPreferredSize(); 194 } 195 196 199 public Dimension preferredLayoutSize(Container arg0) { 200 return this.getPreferredSize(); 201 } 202 203 protected String getValue() { 204 Date dtValue = this.m_dateField.getDate(); 205 String sValue = ""; 206 try { 207 sValue = this.df.format(dtValue); 208 } catch(Exception e) { 209 } 211 212 return sValue; 213 } 214 215 218 public boolean isMetadataValid() { 219 return !this.m_errorLabel.getIcon().toString().equals(IconManager.getInstance().getIcon("16-message-error.gif").toString()); 220 } 221 222 private JSpinner getDateSpinner(DateTimeRange range, String sValue) { 223 JSpinner spinner = null; 224 Date dtMax = range.getMaximum(); 225 Date dtMin = range.getMinimum(); 226 227 228 Date dtNow = null; 229 230 if(sValue!=null && sValue.length()>0) { 231 try { 232 dtNow = this.df.parse(sValue); 233 } catch (ParseException e) { 234 e.printStackTrace(); 235 dtNow = new Date(); 236 } 237 } else { 238 dtNow = new Date(); 239 } 240 241 SpinnerModel dateModel = dateModel = new SpinnerDateModel(dtNow,dtMin,dtMax,Calendar.YEAR); 242 243 spinner = new JSpinner(dateModel); 244 245 spinner.setEditor(new JSpinner.DateEditor(spinner, "yyyy/MM/dd")); 246 247 return spinner; 248 } 249 250 private JSpinner getTimeSpinner(DateTimeRange range, String sValue) { 251 JSpinner spinner = null; 252 Date dtMax = range.getMaximum(); 253 Date dtMin = range.getMinimum(); 254 255 256 Date dtNow = null; 257 258 if(sValue!=null && sValue.length()>0) { 259 try { 260 dtNow = this.df.parse(sValue); 261 } catch (ParseException e) { 262 e.printStackTrace(); 263 dtNow = new Date(); 264 } 265 } else { 266 dtNow = new Date(); 267 } 268 269 SpinnerModel dateModel = dateModel = new SpinnerDateModel(dtNow,dtMin,dtMax,Calendar.YEAR); 270 271 spinner = new JSpinner(dateModel); 272 273 spinner.setEditor(new JSpinner.DateEditor(spinner, "HH:mm")); 274 275 return spinner; 276 } 277 278 281 public void validationFailed(JDateField source, int nReason) { 282 this.m_errorLabel.setIcon( 283 IconManager.getInstance().getIcon("16-message-error.gif")); 284 super.validateTab(); 285 } 286 287 290 public void valueChanged(JDateField source) { 291 this.m_errorLabel.setIcon( 292 IconManager.getInstance().getIcon("16-message-confirm.gif")); 293 this.m_display.valueChanged(this.getValue().trim()); 294 super.validateTab(); 295 } 296 297 } 298 | Popular Tags |