package org.docear.plugin.core.ui; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URL; import java.util.ArrayList; import java.util.List; import javax.swing.AbstractListModel; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JEditorPane; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.border.EmptyBorder; import javax.swing.filechooser.FileFilter; import org.docear.plugin.core.DocearController; import org.docear.plugin.core.ui.components.ComponentGroup; import org.docear.plugin.core.ui.wizard.AWizardPage; import org.docear.plugin.core.ui.wizard.WizardSession; import org.docear.plugin.core.workspace.actions.DocearProjectSettings; import org.docear.plugin.core.workspace.model.DocearWorkspaceProject; import org.freeplane.core.util.LogUtils; import org.freeplane.core.util.TextUtils; import org.freeplane.features.link.LinkController; import org.freeplane.features.mode.Controller; import org.freeplane.plugin.workspace.URIUtils; import org.freeplane.plugin.workspace.WorkspaceController; import org.freeplane.plugin.workspace.components.dialog.NewProjectDialogPanel; import org.freeplane.plugin.workspace.model.project.AWorkspaceProject; import com.jgoodies.forms.factories.FormFactory; import com.jgoodies.forms.layout.ColumnSpec; import com.jgoodies.forms.layout.FormLayout; import com.jgoodies.forms.layout.RowSpec; public class CreateProjectPagePanel extends AWizardPage { private static final long serialVersionUID = 1L; private JLabel lblWarning; private JTextField txtProjectName; private JTextField txtProjectHome; private JTextField txtProjectName_1; private JTextField txtProjectHome_1; private JTextField txtBibFile; private WizardSession cachedContext; private JRadioButton rdbtnStartFromScratch; private JRadioButton rdbtnUseExisting; private JRadioButton rdbtnImportMendeley; private ComponentGroup optionGroup1 = new ComponentGroup(); private ComponentGroup optionGroup2 = new ComponentGroup(); private ComponentGroup option3 = new ComponentGroup(); private boolean byHandPath = false; private boolean byHandBib = false; private boolean isDirty = true; private boolean useDefaultRepository = true; private RepositoryListModel repoModel = new RepositoryListModel(); private List<RepositoryListItem> repositoryItems = new ArrayList<RepositoryListItem>(); private List<URI> parsedList; private JCheckBox chckbxIncludeDemoFiles; private File defaultPath; private MultiLineActionLabel lblInfoWhenCreateAProject; /*********************************************************************************** * CONSTRUCTORS * @param settings **********************************************************************************/ public CreateProjectPagePanel() { setBackground(Color.WHITE); setLayout(new FormLayout(new ColumnSpec[] { FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"),}, new RowSpec[] { FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, RowSpec.decode("fill:default"), FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC,})); lblInfoWhenCreateAProject = new MultiLineActionLabel(TextUtils.getText("docear.setup.wizard.create.info")); Font f = lblInfoWhenCreateAProject.getFont().deriveFont(Font.BOLD); lblInfoWhenCreateAProject.setFont(f); lblInfoWhenCreateAProject.setForeground(Color.RED); lblInfoWhenCreateAProject.setBackground(Color.WHITE); lblInfoWhenCreateAProject.setVisible(!WorkspaceController.getCurrentModel().getProjects().isEmpty()); lblInfoWhenCreateAProject.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if("project_read_more".equals(e.getActionCommand())) { try { Controller.getCurrentController().getViewController().openDocument(URI.create("http://www.docear.org/faqs/what-is-a-project/")); } catch (IOException e1) { e1.printStackTrace(); } } } }); add(lblInfoWhenCreateAProject, "4, 2, 7, 1"); /*********** * option 1 */ lblWarning = new JLabel(TextUtils.getText("docear.setup.wizard.create.warn1")); URL url = WorkspaceController.class.getResource("/images/16x16/dialog-warning-4.png"); if(url != null) { lblWarning.setIcon(new ImageIcon(url)); } lblWarning.setVisible(false); add(lblWarning, "2, 4, 9, 1"); rdbtnStartFromScratch = new JRadioButton(TextUtils.getText("docear.setup.wizard.create.option.title.1")); rdbtnStartFromScratch.setSelected(true); rdbtnStartFromScratch.setBackground(Color.WHITE); rdbtnStartFromScratch.setFont(rdbtnStartFromScratch.getFont().deriveFont(Font.BOLD, 11)); rdbtnStartFromScratch.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { updateFields(); } }); add(rdbtnStartFromScratch, "2, 6, 9, 1"); JLabel lblProjectName = new JLabel(TextUtils.getText("docear.setup.wizard.create.name.label")); add(lblProjectName, "4, 8, right, default"); computeDefaultProjectPath(null); txtProjectName = new JTextField(); txtProjectName.setText(defaultPath.getName()); txtProjectName.setColumns(10); txtProjectName.addKeyListener(getProjectNameListener()); add(txtProjectName, "6, 8, fill, default"); JLabel lblProjectHome = new JLabel(TextUtils.getText("docear.setup.wizard.create.home.label")); add(lblProjectHome, "4, 10, right, default"); txtProjectHome = new JTextField(); txtProjectHome.setText(defaultPath.getAbsolutePath()); txtProjectHome.setColumns(10); txtProjectHome.addKeyListener(getProjectHomeListener()); add(txtProjectHome, "6, 10, fill, default"); JButton btnBrowse = new JButton(TextUtils.getText("docear.setup.wizard.create.browse.label")); btnBrowse.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { showProjectHomeChooser(); } }); add(btnBrowse, "8, 10"); optionGroup1.add(lblProjectHome); optionGroup1.add(lblProjectName); optionGroup1.add(txtProjectHome); optionGroup1.add(txtProjectName); optionGroup1.add(btnBrowse); /*********** * option 2 */ rdbtnUseExisting = new JRadioButton(TextUtils.getText("docear.setup.wizard.create.option.title.2")); rdbtnUseExisting.setBackground(Color.WHITE); rdbtnUseExisting.setFont(rdbtnUseExisting.getFont().deriveFont(Font.BOLD, 11)); rdbtnUseExisting.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { updateFields(); } }); add(rdbtnUseExisting, "2, 12, 9, 1"); final JEditorPane dtrpnInfoText = new JEditorPane() { private static final long serialVersionUID = 1L; @Override public void setEnabled(boolean enabled) { if(enabled) { setForeground(UIManager.getColor("EditorPane.foreground")); } else { Color col = UIManager.getColor("EditorPane.disabledText"); if(col == null) { col = UIManager.getColor("EditorPane.inactiveForeground"); } setForeground(col); } } }/**/; dtrpnInfoText.setEditable(false); dtrpnInfoText.setBackground(Color.WHITE); dtrpnInfoText.setText(TextUtils.getText("docear.setup.wizard.create.option.info")); add(dtrpnInfoText, "4, 13, 7, 1, fill, fill"); final MultiLineActionLabel malReadInfo = new MultiLineActionLabel(TextUtils.getText("docear.setup.wizard.create.option.read")); malReadInfo.setBorder(new EmptyBorder(0, 2, 0, 0)); malReadInfo.setBackground(Color.WHITE); malReadInfo.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { if("mendeley".equals(e.getActionCommand())) { Controller.getCurrentController().getViewController().openDocument(URI.create("http://www.docear.org/faqs/how-to-use-zotero-and-docear-at-the-same-time/")); } else if("zotero".equals(e.getActionCommand())) { Controller.getCurrentController().getViewController().openDocument(URI.create("http://www.docear.org/faqs/how-to-use-zotero-and-docear-at-the-same-time/")); } } catch (IOException ex) { LogUtils.warn("org.docear.plugin.core.ui.CreateProjectPagePanel.CreateProjectPagePanel()$ActionListener.actionPerformed(ActionEvent): "+ ex.getMessage()); } } }); add(malReadInfo, "4, 14, 7, 1, fill, top"); final JLabel lblProjectName_1 = new JLabel(TextUtils.getText("docear.setup.wizard.create.name.label")); add(lblProjectName_1, "4, 16, right, top"); computeDefaultProjectPath(null); txtProjectName_1 = new JTextField(); txtProjectName_1.setText(defaultPath.getName()); txtProjectName_1.setColumns(10); txtProjectName_1.addKeyListener(getProjectNameListener()); add(txtProjectName_1, "6, 16, fill, default"); final JLabel lblProjectHome_1 = new JLabel(TextUtils.getText("docear.setup.wizard.create.home.label")); add(lblProjectHome_1, "4, 18, right, top"); txtProjectHome_1 = new JTextField(); txtProjectHome_1.setText(defaultPath.getAbsolutePath()); txtProjectHome_1.setColumns(10); txtProjectHome_1.addKeyListener(getProjectHomeListener()); add(txtProjectHome_1, "6, 18, fill, default"); final JButton btnBrowse_2 = new JButton(TextUtils.getText("docear.setup.wizard.create.browse.label")); btnBrowse_2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { showProjectHomeChooser(); } }); add(btnBrowse_2, "8, 18"); final JLabel lblBibtexFile = new JLabel(TextUtils.getText("docear.setup.wizard.create.bibtex.label")); add(lblBibtexFile, "4, 20, right, top"); txtBibFile = new JTextField(); txtBibFile.setText(getProjectName()+".bib"); txtBibFile.setColumns(10); txtBibFile.addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) { if(NewProjectDialogPanel.isBlackListed(e.getKeyChar())) { e.consume(); } else { checkBibTeXWarning(); } } @Override public void keyReleased(KeyEvent e) { if(NewProjectDialogPanel.isBlackListed(e.getKeyChar())) { e.consume(); } else { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { setBibTeXPath(txtBibFile.getText()); checkBibTeXWarning(); } }); } byHandBib = true; } @Override public void keyPressed(KeyEvent e) { if(NewProjectDialogPanel.isBlackListed(e.getKeyChar())) { e.consume(); } else { checkBibTeXWarning(); } } }); add(txtBibFile, "6, 20, fill, default"); final JButton btnBrowseBib = new JButton(TextUtils.getText("docear.setup.wizard.create.browse.label")); btnBrowseBib.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { File home = URIUtils.getAbsoluteFile(getProjectHome()); while(home != null && !home.exists()) { home = home.getParentFile(); } computeDefaultProjectPath(getProjectName()); JFileChooser chooser = new JFileChooser(home == null ? defaultPath.getAbsolutePath() : home.getAbsolutePath()); chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); chooser.setMultiSelectionEnabled(false); chooser.setFileHidingEnabled(true); chooser.addChoosableFileFilter(new FileFilter() { public String getDescription() { return "*.bib (" + TextUtils.getText("locationdialog.filefilter.bib") + ")"; } public boolean accept(File f) { return (f.isDirectory() || f.getName().endsWith(".bib")); } }); int response = chooser.showOpenDialog(getRootPane()); if(response == JFileChooser.APPROVE_OPTION) { byHandBib = true; File file = chooser.getSelectedFile(); setBibTeXPath(file.getAbsolutePath()); checkBibTeXWarning(); } } }); add(btnBrowseBib, "8, 20"); JLabel lblPdfsLiterature = new JLabel(TextUtils.getText("docear.setup.wizard.create.literature.label")); add(lblPdfsLiterature, "4, 22, right, top"); JScrollPane scrollPane = new JScrollPane(); add(scrollPane, "6, 22, 1, 5, fill, fill"); final JList repositoryPathList = new JList(); repositoryPathList.setModel(repoModel); repoModel.addItem(new DefaultRepositoryListItem()); scrollPane.setViewportView(repositoryPathList); final JButton btnAdd = new JButton(TextUtils.getText("docear.setup.wizard.create.add.label")); btnAdd.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { File home = URIUtils.getAbsoluteFile(getProjectHome()); while(home != null && !home.exists()) { home = home.getParentFile(); } computeDefaultProjectPath(getProjectName()); JFileChooser chooser = new JFileChooser(home == null ? defaultPath.getAbsolutePath() : home.getAbsolutePath()); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); chooser.setMultiSelectionEnabled(false); chooser.setFileHidingEnabled(true); chooser.setFileFilter(new FileFilter() { @Override public boolean accept(File file) { for(RepositoryListItem item : getRepositoryItems()) { if(file.toURI().getPath().startsWith(item.getPathURI().getPath())) { return false; } } if(file.isDirectory()) { return true; } return false; } @Override public String getDescription() { return ""; } }); int response = chooser.showOpenDialog(getRootPane()); if(response == JFileChooser.APPROVE_OPTION) { File file = chooser.getSelectedFile(); repoModel.addItem(new RepositoryListItem(file.getAbsolutePath())); } } }); add(btnAdd, "8, 22"); final JButton btnRemove = new JButton(TextUtils.getText("docear.setup.wizard.create.remove.label")); btnRemove.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int[] indices = repositoryPathList.getSelectedIndices(); //DOCEAR - todo: question dialog if(true) { for (int i=indices.length-1; i >= 0 ; i--) { repoModel.removeItem(indices[i]); } } } }); add(btnRemove, "8, 24"); optionGroup2.add(lblProjectHome_1); optionGroup2.add(lblProjectName_1); optionGroup2.add(lblBibtexFile); optionGroup2.add(lblPdfsLiterature); optionGroup2.add(txtBibFile); optionGroup2.add(repositoryPathList); optionGroup2.add(scrollPane); optionGroup2.add(btnBrowseBib); optionGroup2.add(btnBrowse_2); optionGroup2.add(btnAdd); optionGroup2.add(btnRemove); optionGroup2.add(txtProjectHome_1); optionGroup2.add(txtProjectName_1); optionGroup2.add(malReadInfo); optionGroup2.add(dtrpnInfoText); /*********** * option 3 */ rdbtnImportMendeley = new JRadioButton(TextUtils.getText("docear.setup.wizard.create.option.title.3")); rdbtnImportMendeley.setFont(rdbtnImportMendeley.getFont().deriveFont(Font.BOLD, 11)); rdbtnImportMendeley.setEnabled(false); rdbtnImportMendeley.setBackground(Color.WHITE); rdbtnImportMendeley.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { updateFields(); } }); //add(rdbtnImportMendeley, "2, 26, 9, 1"); chckbxIncludeDemoFiles = new JCheckBox(TextUtils.getText("docear.setup.wizard.create.demo.label")); chckbxIncludeDemoFiles.setSelected(true); chckbxIncludeDemoFiles.setBackground(Color.WHITE); add(chckbxIncludeDemoFiles, "2, 30, 9, 1"); ButtonGroup group = new ButtonGroup(); group.add(rdbtnImportMendeley); group.add(rdbtnStartFromScratch); group.add(rdbtnUseExisting); rdbtnStartFromScratch.setSelected(true); } /*********************************************************************************** * METHODS **********************************************************************************/ private void computeDefaultProjectPath(String projectName) { File base = URIUtils.getAbsoluteFile(WorkspaceController.getDefaultProjectHome()); if(projectName == null) { projectName = TextUtils.getText("docear.setup.wizard.create.name.default"); } File path = new File(base, projectName.trim()); int counter = 1; while(path.exists() && projectName.trim().length() > 0) { path = new File(base, projectName.trim()+" "+(counter++)); } this.defaultPath = path; } private void updateFields() { if(isStartFromScratch()) { optionGroup1.setEnabled(true); optionGroup2.setEnabled(false); option3.setEnabled(false); } else if(isUseExistingParts()) { optionGroup1.setEnabled(false); optionGroup2.setEnabled(true); option3.setEnabled(false); } else if(isImportMendeley()) { optionGroup1.setEnabled(false); optionGroup2.setEnabled(false); option3.setEnabled(true); } } private void enableControls(WizardSession context) { if(context != null) { if(nameExistsInWorkspace(getProjectName())) { lblWarning.setText(TextUtils.getText("docear.setup.wizard.create.warn1")); lblWarning.setVisible(true); context.getNextButton().setEnabled(false); } else if(pathExistsInWorkspace(getProjectHomePath())) { lblWarning.setText(TextUtils.getText("docear.setup.wizard.create.warn2")); lblWarning.setVisible(true); context.getNextButton().setEnabled(false); } else { context.getNextButton().setEnabled(true); lblWarning.setVisible(false); } } } private KeyListener getProjectNameListener() { return new KeyListener() { public void keyTyped(KeyEvent evt) { if(NewProjectDialogPanel.isBlackListed(evt.getKeyChar())) { evt.consume(); } enableControls(cachedContext); } public void keyReleased(KeyEvent evt) { if(NewProjectDialogPanel.isBlackListed(evt.getKeyChar())) { evt.consume(); } else { SwingUtilities.invokeLater(new Runnable() { public void run() { setProjectName(getProjectName()); } }); if(!byHandPath) { SwingUtilities.invokeLater(new Runnable() { public void run() { computeDefaultProjectPath(getProjectName()); setProjectName(defaultPath.getName()); setProjectHome(defaultPath.getAbsolutePath()); } }); } if(!byHandBib) { SwingUtilities.invokeLater(new Runnable() { public void run() { setBibTeXPath(getProjectName()+".bib"); } }); } } enableControls(cachedContext); } public void keyPressed(KeyEvent evt) { if(NewProjectDialogPanel.isBlackListed(evt.getKeyChar())) { evt.consume(); } enableControls(cachedContext); } }; } private KeyListener getProjectHomeListener() { return new KeyListener() { public void keyTyped(KeyEvent evt) { if(NewProjectDialogPanel.isBlackListed(evt.getKeyChar())) { evt.consume(); } else { byHandPath = true; } enableControls(cachedContext); } public void keyReleased(KeyEvent evt) { if(NewProjectDialogPanel.isBlackListed(evt.getKeyChar())) { evt.consume(); } else { byHandPath = true; } enableControls(cachedContext); } public void keyPressed(KeyEvent evt) { if(NewProjectDialogPanel.isBlackListed(evt.getKeyChar())) { evt.consume(); } else { byHandPath = true; } enableControls(cachedContext); } }; } private void showProjectHomeChooser() { File home = URIUtils.getAbsoluteFile(getProjectHome()); while(home != null && !home.exists()) { home = home.getParentFile(); } computeDefaultProjectPath(getProjectName()); JFileChooser chooser = new JFileChooser(home == null ? defaultPath.getAbsolutePath() : home.getAbsolutePath()); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); chooser.setMultiSelectionEnabled(false); chooser.setFileHidingEnabled(true); int response = chooser.showOpenDialog(getRootPane()); if(response == JFileChooser.APPROVE_OPTION) { File file = chooser.getSelectedFile(); setProjectHome(file.getAbsolutePath()); byHandPath = true; } } private void setProjectName(String name) { if(isUseExistingParts()) { txtProjectName.setText(name); } else if(isStartFromScratch()) { txtProjectName_1.setText(name); } } private void setProjectHome(String path) { txtProjectHome.setText(path); txtProjectHome_1.setText(path); } private void setBibTeXPath(String path) { isDirty = true; txtBibFile.setText(path); } private void checkBibTeXWarning() { enableControls(cachedContext); if(getBibTeXPath() != null) { File base = URIUtils.getFile(getProjectHome()); File bib = URIUtils.getFile(getBibTeXPath()); URI relativeURI = org.freeplane.features.link.LinkController.toRelativeURI(base, bib, LinkController.LINK_RELATIVE_TO_MINDMAP); if(relativeURI != null && relativeURI.getPath().startsWith("..")) { lblWarning.setText(TextUtils.getText("docear.setup.wizard.create.warn3")); lblWarning.setVisible(true); } } } private boolean nameExistsInWorkspace(String name) { if(name == null) { return true; } for(AWorkspaceProject project : WorkspaceController.getCurrentModel().getProjects()) { try { if(project.getProjectName().equals(name)) { return true; } } catch (Exception e) { LogUtils.info(""+e.getMessage()); } } return false; } private boolean pathExistsInWorkspace(String path) { if(path == null) { return true; } for(AWorkspaceProject project : WorkspaceController.getCurrentModel().getProjects()) { try { if(URIUtils.getFile(project.getProjectHome()).getAbsolutePath().equals(new File(path).getAbsolutePath())) { return true; } } catch (Exception e) { LogUtils.info(""+e.getMessage()); } } return false; } private List<RepositoryListItem> getRepositoryItems() { return repositoryItems; } private List<URI> parseRepositoryItemList() { if(isDirty) { useDefaultRepository = false; parsedList = new ArrayList<URI>(); for (RepositoryListItem item : repositoryItems) { if(item instanceof DefaultRepositoryListItem) { useDefaultRepository = true; continue; } parsedList.add(item.getPathURI()); } } return parsedList; } public List<URI> getRepositoryPathList() { parseRepositoryItemList(); return parsedList; } public boolean useDefaultRepositoryPath() { parseRepositoryItemList(); return useDefaultRepository ; } public boolean isStartFromScratch() { return rdbtnStartFromScratch.isSelected(); } public boolean isUseExistingParts() { return rdbtnUseExisting.isSelected(); } public boolean isImportMendeley() { return rdbtnImportMendeley.isSelected(); } public String getProjectName() { if(isStartFromScratch()) { return txtProjectName.getText().trim(); } else if(isUseExistingParts()) { return txtProjectName_1.getText().trim(); } return null; } public URI getProjectHome() { return new File(getProjectHomePath()).toURI(); } public String getProjectHomePath() { if(isStartFromScratch()) { return txtProjectHome.getText().trim(); } else if(isUseExistingParts()) { return txtProjectHome_1.getText().trim(); } return null; } public URI getBibTeXPath() { if(txtBibFile.getText().trim().startsWith(getProjectName())) { return null; } try { File file = new File(txtBibFile.getText()); if(!file.isAbsolute()) { file = new File(getProjectHomePath(), txtBibFile.getText()); } return file.toURI(); } catch (Exception e) { } return null; } public boolean includeDemoFiles() { return chckbxIncludeDemoFiles.isSelected(); } /*********************************************************************************** * REQUIRED METHODS FOR INTERFACES **********************************************************************************/ public String getTitle() { //TODO Service if(DocearController.getController().isServiceAvailable()){ return TextUtils.getText("docear.setup.wizard.create.title"); } else{ return TextUtils.getText("docear.setup.wizard.create.title.noservice"); } } @Override public void preparePage(WizardSession context) { this.cachedContext = context; context.setWizardTitle(getTitle()); context.getNextButton().setText(TextUtils.getText("docear.setup.wizard.controls.finish")); updateFields(); enableControls(context); } /*********************************************************************************** * NESTED TYPES **********************************************************************************/ class RepositoryListModel extends AbstractListModel { private static final long serialVersionUID = 1L; @Override public int getSize() { return getRepositoryItems().size(); } public void removeItem(int index) { getRepositoryItems().remove(index); fireIntervalRemoved(this, index, index); isDirty = true; } public void addItem(RepositoryListItem item) { int index = getRepositoryItems().size(); getRepositoryItems().add(item); fireIntervalAdded(this, index, index); isDirty = true; } public void insertItem(RepositoryListItem item, int index) { getRepositoryItems().add(index, item); fireIntervalAdded(this, index, index); isDirty = true; } @Override public Object getElementAt(int index) { return getRepositoryItems().get(index); } } public class RepositoryListItem { protected File file; public RepositoryListItem(String filePath) { if(filePath == null) { throw new IllegalArgumentException("NULL"); } file = new File(filePath); } public String toString() { return this.file.getPath(); } public URI getPathURI() { if(file == null) { return null; } return file.toURI(); } } private class DefaultRepositoryListItem extends RepositoryListItem { public DefaultRepositoryListItem() { super(""); } public String toString() { return /*"[default repository] "+*/new File(URIUtils.getFile(getProjectHome()), "literature_repository"+File.separator).getPath(); } } public DocearWorkspaceProject getProject() { AWorkspaceProject project = AWorkspaceProject.create(null, getProjectHome()); DocearProjectSettings settings = new DocearProjectSettings(); settings.includeDemoFiles(includeDemoFiles()); settings.setProjectName(getProjectName()); if(isUseExistingParts()) { settings.setBibTeXLibraryPath(getBibTeXPath()); settings.setUseDefaultRepositoryPath(useDefaultRepositoryPath()); for(URI uri : getRepositoryPathList()) { settings.addRepositoryPathURI(uri); } } project.addExtension(settings); return (DocearWorkspaceProject) project; } }