001: /**
002: * LibreSource
003: * Copyright (C) 2004-2008 Artenum SARL / INRIA
004: * http://www.libresource.org - contact@artenum.com
005: *
006: * This file is part of the LibreSource software,
007: * which can be used and distributed under license conditions.
008: * The license conditions are provided in the LICENSE.TXT file
009: * at the root path of the packaging that enclose this file.
010: * More information can be found at
011: * - http://dev.libresource.org/home/license
012: *
013: * Initial authors :
014: *
015: * Guillaume Bort / INRIA
016: * Francois Charoy / Universite Nancy 2
017: * Julien Forest / Artenum
018: * Claude Godart / Universite Henry Poincare
019: * Florent Jouille / INRIA
020: * Sebastien Jourdain / INRIA / Artenum
021: * Yves Lerumeur / Artenum
022: * Pascal Molli / Universite Henry Poincare
023: * Gerald Oster / INRIA
024: * Mariarosa Penzi / Artenum
025: * Gerard Sookahet / Artenum
026: * Raphael Tani / INRIA
027: *
028: * Contributors :
029: *
030: * Stephane Bagnier / Artenum
031: * Amadou Dia / Artenum-IUP Blois
032: * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
033: */package org.libresource.so6.core.exec.ui;
034:
035: import org.libresource.so6.core.WsConnection;
036: import org.libresource.so6.core.interfaces.Closer;
037: import org.libresource.so6.core.interfaces.ConflictViewer;
038: import org.libresource.so6.core.ui.BasicMenu;
039: import org.libresource.so6.core.ui.BasicProgressView;
040: import org.libresource.so6.core.ui.ConflictView;
041: import org.libresource.so6.core.ui.TextView;
042: import org.libresource.so6.core.ui.util.StyledUI;
043: import org.libresource.so6.core.ui.util.Wizard;
044: import org.libresource.so6.core.ui.util.WizardComponent;
045: import org.libresource.so6.core.ui.util.WizardListener;
046:
047: import java.awt.BorderLayout;
048: import java.awt.Color;
049: import java.awt.Toolkit;
050: import java.awt.event.ActionEvent;
051: import java.awt.event.ActionListener;
052: import java.awt.event.WindowAdapter;
053: import java.awt.event.WindowEvent;
054:
055: import javax.swing.JFrame;
056: import javax.swing.JOptionPane;
057: import javax.swing.JPanel;
058:
059: /**
060: * @author smack
061: */
062: public class Update extends JPanel implements ActionListener,
063: WizardListener, ConflictViewer, StyledUI {
064: private BasicMenu menuBar;
065:
066: //
067: private TextView reportView;
068: private BasicProgressView progressView;
069: private ConflictView conflictView;
070:
071: //
072: private Wizard wizard;
073:
074: //
075: private boolean jobDone = false;
076:
077: public Update(String wscPath) throws Exception {
078: // Make views
079: progressView = new BasicProgressView(wscPath);
080: reportView = new TextView("Report");
081: reportView.setEditable(false);
082: conflictView = new ConflictView(wscPath);
083: conflictView.setConflictViewer(this );
084:
085: // Make menu
086: menuBar = new BasicMenu();
087: menuBar.setProgressView(progressView);
088:
089: //
090: wizard = new Wizard(this );
091: wizard.setMenuBar(menuBar);
092: wizard.addComponent(progressView);
093: wizard.addComponent(reportView);
094: wizard.addComponent(conflictView);
095: wizard.renderView(0);
096:
097: //
098: setLayout(new BorderLayout());
099: add(wizard, BorderLayout.CENTER);
100: }
101:
102: public BasicMenu getMenu() {
103: return menuBar;
104: }
105:
106: public WizardComponent getProgressView() {
107: return progressView;
108: }
109:
110: public WizardComponent getReportView() {
111: return reportView;
112: }
113:
114: public WizardComponent getConflictView() {
115: return conflictView;
116: }
117:
118: public void setConflictViewer(ConflictViewer cfv) {
119: conflictView.setConflictViewer(cfv);
120: }
121:
122: public void doTheJob() {
123: if (!jobDone) {
124: progressView.update();
125: }
126:
127: jobDone = true;
128:
129: if (progressView.getReport().length() > 0) {
130: reportView.setContent(progressView.getReport());
131: } else {
132: reportView.setContent("Nothing done...");
133: }
134:
135: try {
136: conflictView.search();
137: } catch (Exception e) {
138: JOptionPane.showMessageDialog(null, e.getMessage());
139: }
140:
141: reportView.getWizard().renderButtons();
142: }
143:
144: public static void main(String[] args) throws Exception {
145: if (args.length != 1) {
146: System.err.println("Usage: wsPath");
147: System.err.println(" (1) wsPath: path of the file "
148: + WsConnection.SO6_WSC_FILE);
149: System.exit(0);
150: }
151:
152: String wscPath = args[0];
153: Update update = new Update(wscPath);
154: update.setStyle(Color.white, Color.decode("#eeeeee"));
155:
156: JFrame f = new JFrame("Update connection: " + wscPath);
157: f.getContentPane().add(update, BorderLayout.CENTER);
158: f.setSize(400, 215);
159: f.addWindowListener(new WindowAdapter() {
160: public void windowClosing(WindowEvent e) {
161: System.exit(0);
162: }
163: });
164: f.setLocation(((int) java.awt.Toolkit.getDefaultToolkit()
165: .getScreenSize().getWidth() - f.getWidth()) / 2,
166: ((int) Toolkit.getDefaultToolkit().getScreenSize()
167: .getHeight() - f.getHeight()) / 2);
168: f.setVisible(true);
169: }
170:
171: public void actionPerformed(ActionEvent e) {
172: String command = e.getActionCommand();
173:
174: if (command.equals("EXIT")) {
175: System.exit(0);
176: } else if (command.equals("LOG")) {
177: if (((BasicProgressView) getProgressView()).isLogShow()) {
178: ((BasicProgressView) getProgressView()).hideLog();
179: } else {
180: ((BasicProgressView) getProgressView()).showLog();
181: }
182: }
183: }
184:
185: public boolean setCurrentPosition(int currentHistoryPosition) {
186: // ask comment -> commit <-> report
187: if (currentHistoryPosition == 0) {
188: Thread thread = new Thread(new Runnable() {
189: public void run() {
190: doTheJob();
191: }
192: });
193: thread.setPriority(Thread.NORM_PRIORITY);
194: thread.start();
195: } else {
196: reportView.getWizard().renderButtons();
197: }
198:
199: return true;
200: }
201:
202: public void showConflictEditor(String filePath) throws Exception {
203: JFrame f = new JFrame("Conflict editor : " + filePath);
204: f.getContentPane().add(new ConflictEditor(filePath));
205: f.setSize(400, 400);
206: f.setVisible(true);
207: }
208:
209: public void setStyle(Color back, Color forground) {
210: wizard.setStyle(back, forground);
211: }
212:
213: public void setCloser(Closer closer) {
214: wizard.setCloser(closer);
215: menuBar.setCloser(closer);
216: }
217: }
|