/******************************************************************************* * Copyright (c) 2005-2008, Daniel Lutz and Elexis * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Daniel Lutz - initial implementation * G. Weirich - small changes to follow API changes * *******************************************************************************/ package ch.elexis.extdoc.dialogs; import java.io.File; import java.util.Calendar; import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.*; import ch.elexis.core.ui.UiDesk; import ch.elexis.core.ui.icons.Images; import ch.elexis.core.ui.util.SWTHelper; import ch.rgw.tools.StringTool; import ch.rgw.tools.TimeTool; import ch.elexis.extdoc.Messages; import ch.elexis.extdoc.util.*; import com.tiff.common.ui.datepicker.DatePickerCombo; public class FileEditDialog extends TitleAreaDialog { private static final int WIDGET_SPACE = 20; private Text tDateiname; private Text tExtension; private DatePickerCombo dp; private File file; public FileEditDialog(Shell parent, File file){ super(parent); this.file = file; } @Override protected Control createDialogArea(Composite parent){ String fileName = file.getName(); String fileExtension = ""; //$NON-NLS-1$ // extract name and extension Pattern p = Pattern.compile("^(.+)\\.([^.]+)$"); //$NON-NLS-1$ Matcher m = p.matcher(fileName); if (m.matches()) { // replace fileName with prefix and fileExtension with suffix fileName = m.group(1); fileExtension = m.group(2); } Composite area = new Composite(parent, SWT.NONE); area.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); area.setLayout(new GridLayout(2, true)); Label label; GridData gd; // filename text (without extension) label = new Label(area, SWT.NONE); label.setText(Messages.FileEditDialog_file_name + file.getParent()); label.setLayoutData(SWTHelper.getFillGridData(2, true, 1, false)); tDateiname = new Text(area, SWT.BORDER); tDateiname.setText(fileName); tDateiname.setLayoutData(SWTHelper.getFillGridData(2, true, 1, false)); SWTHelper.setSelectOnFocus(tDateiname); // date label label = new Label(area, SWT.NONE); label.setText(String.format(Messages.FileEditDialog_file_date_and_explanation, new TimeTool(file.lastModified()).toString(TimeTool.DATE_GER))); gd = SWTHelper.getFillGridData(1, true, 1, false); gd.verticalIndent = WIDGET_SPACE; label.setLayoutData(gd); // extension label label = new Label(area, SWT.NONE); label.setText(Messages.FileEditDialog_extension); gd = SWTHelper.getFillGridData(1, true, 1, false); gd.verticalIndent = WIDGET_SPACE; label.setLayoutData(gd); // date text / datepickercombo dp = new DatePickerCombo(area, SWT.NONE); // current date of file /* * doesn't work, because you can't decide if user has changed date or just only set cursor * into date edit field */ // dp.setDate(new Date(file.lastModified())); // TODO DEBUG // System.out.println("old time: " + file.lastModified()); // extension text tExtension = new Text(area, SWT.BORDER); tExtension.setText(fileExtension); tExtension.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false)); SWTHelper.setSelectOnFocus(tExtension); return area; } @Override public void create(){ super.create(); setMessage(Messages.ExterneDokumente_rename_or_change_date); setTitle(Messages.FileEditDialog_file_properties); getShell().setText(Messages.FileEditDialog_file_properties); setTitleImage(Images.IMG_LOGO.getImage()); } @Override protected void okPressed(){ String fileName = tDateiname.getText(); String fileExtension = tExtension.getText(); String dateiname; if (StringTool.isNothing(fileExtension)) { dateiname = fileName; } else { // re-assemble prefix and suffix dateiname = fileName + "." + fileExtension; //$NON-NLS-1$ } Date datum = dp.getDate(); if (datum != null && datum.getTime() != file.lastModified()) { // set time to 00:00 Calendar cal = Calendar.getInstance(); cal.setTime(datum); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); Long newTime = cal.getTimeInMillis(); System.out.println("new time: " + newTime + " (" + file.lastModified() + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ file.setLastModified(newTime); } if (!file.getName().equals(dateiname)) { File newFile = new File(file.getParent(), dateiname); System.out.format("rename %1s ->%2s (%3s)", file.getAbsolutePath(), //$NON-NLS-1$ newFile.getAbsolutePath(), file.getName()); String oldShort = MatchPatientToPath.firstToken(file.getName()); String newShort = MatchPatientToPath.firstToken(newFile.getName()); if (!oldShort.equals(newShort)) { if (SWTHelper.askYesNo(Messages.FileEditDialog_attribute_to_new_patient, String .format(Messages.FileEditDialog_really_attribute_to_new_patient, oldShort, newShort))) { System.out.format("okPressed move %1s -> %2s", oldShort, newShort); //$NON-NLS-1$ } else { System.out.format("cancelPressed move %1s -> %2s", oldShort, newShort); //$NON-NLS-1$ super.cancelPressed(); return; } } if (file.renameTo(newFile)) { // seems to be required on Windows // newFile.setLastModified(file.lastModified()); } else { MessageDialog.openError(getShell(), Messages.FileEditDialog_17, Messages.FileEditDialog_18); } } super.okPressed(); } }