/**
* BirthDataPanel.java
* Created On 2006, May 27, 2006 2:19:01 PM
* @author E. Rajasekar
*/
package app.astrosoft.ui.comp;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
import javax.swing.SwingWorker;
import javax.swing.UIDefaults;
import app.astrosoft.beans.BirthData;
import app.astrosoft.beans.Place;
import app.astrosoft.consts.Command;
import app.astrosoft.consts.DisplayStrings;
import app.astrosoft.consts.Language;
import app.astrosoft.export.XMLHelper;
import app.astrosoft.ui.cal.JCalendarCombo;
import app.astrosoft.ui.util.SpringUtilities;
import app.astrosoft.ui.util.UIConsts;
import app.astrosoft.ui.util.UIUtil;
import app.astrosoft.util.AstroUtil;
import app.astrosoft.util.AstrosoftFileFilter;
import app.astrosoft.util.FileOps;
import app.astrosoft.util.Timer;
public class BirthDataPanel extends JPanel {
private static final Logger log = Logger.getLogger(BirthDataPanel.class.getName());
private JLabel l_name = new JLabel(DisplayStrings.NAME_STR.toString(Language.ENGLISH));
private JLabel l_date = new JLabel(DisplayStrings.DATE_STR.toString(Language.ENGLISH));
private JTextField name = new JTextField();
private JButton openButton = new JButton(UIUtil.createImageIcon(Command.OPEN.name()));
private CalendarChooser timeChooser;
private JCalendarCombo jCalendarCombo;
private PlaceChooser placeChooser;
private Dimension panelSize;
private String title;
private Worker w = new Worker();
private class Worker extends SwingWorker<PlaceChooser, Void>{
@Override
public PlaceChooser doInBackground() {
try {
//return new PlaceChooser(new Dimension(panelSize.width - 60, panelSize.height - (int)(panelSize.height * 0.50)), false);
PlaceChooser pc = new PlaceChooser(new Dimension(panelSize.width - 60, panelSize.height - (int)(panelSize.height * 0.50)), false);
return pc;
} catch (Exception e){
log.log(Level.SEVERE, "Exception in constructing BirthDataPanel " , e);
}
return null;
}
@Override
protected void done() {
}
}
public BirthDataPanel(Dimension size, String title){
this.panelSize = size;
this.title = title;
w.execute();
openButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
browseHoroscope();
}
});
addComponents();
setPreferredSize(panelSize);
}
private void addComponents() {
setLayout(new SpringLayout());
timeChooser = CalendarChooser.getTimeChooser();
jCalendarCombo = new JCalendarCombo( 0, false, 1801, 2099 );
JPanel birthPanel = timeChooser.getChooser(DisplayStrings.BIRTH_TIME_STR.toString());
JPanel namePanel = new JPanel(new SpringLayout());
namePanel.add(name);
namePanel.add(openButton);
openButton.setPreferredSize(UIConsts.BUTTON_ICON_SIZE);
SpringUtilities.makeCompactGrid(namePanel, 1, 2, 0,0,1,1);
birthPanel.add(l_name, 0);
birthPanel.add(namePanel, 1);
birthPanel.add(l_date, 2);
birthPanel.add(jCalendarCombo, 3);
SpringUtilities.makeCompactGrid(birthPanel, 3, 2, 5,5,10,15);
add(birthPanel);
//placeChooser = new PlaceChooser(new Dimension(panelSize.width - 60, panelSize.height - (int)(panelSize.height * 0.50)), false);
try {
placeChooser = w.get();
}catch(Exception e){
log.log(Level.SEVERE, "Exception in constructing BirthDataPanel " , e);
}
add(placeChooser);
SpringUtilities.makeCompactGrid(this, 2, 1, 5,5,0,0);
setBorder(UIConsts.getTitleBorder(title));
}
public String getPersonName() {
return name.getText();
}
public Place getBirthPlace(){
return placeChooser.getSelectedPlace();
}
public Calendar getBirthTime(){
Calendar birthTime = AstroUtil.getCalendar(timeChooser.getSelectedDate());
Calendar birthCal = new GregorianCalendar(
Integer.parseInt(jCalendarCombo.getSelectedYear()),
Integer.parseInt(jCalendarCombo.getSelectedMonth()) - 1,
Integer.parseInt(jCalendarCombo.getSelectedDay()),
birthTime.get(Calendar.HOUR_OF_DAY),birthTime.get(Calendar.MINUTE),
birthTime.get(Calendar.SECOND) );
return birthCal;
}
public BirthData getBirthData(){
return new BirthData(getPersonName(), getBirthTime(), getBirthPlace());
}
public void setPersonName(String personName){
name.setText(personName);
}
public void setBirthPlace(Place place){
placeChooser.setSelectedPlace(place);
}
public void setBirthTime(Calendar cal){
timeChooser.setSelectedDate(cal.getTime());
jCalendarCombo.setSelectedDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DATE));
}
public void setBirthData(BirthData birthData){
setPersonName(birthData.name());
setBirthTime(birthData.birthDay());
setBirthPlace(birthData.getBirthPlace());
}
private void browseHoroscope(){
String file = FileOps.openFileDialog(this, FileOps.FileDialogMode.OPEN, AstrosoftFileFilter.HOROSCOPE_EXTN);
if (file != null) {
setBirthData(BirthData.valueOfXMLNode(XMLHelper.parseXML(file).getChildNodes().item(0)));
}
}
}