/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Oracle - initial API and implementation from Oracle TopLink ******************************************************************************/ package org.eclipse.persistence.tools.workbench.test.mappingsplugin.ui.meta; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.WindowConstants; import org.eclipse.persistence.tools.workbench.test.framework.TestWorkbenchContext; import org.eclipse.persistence.tools.workbench.test.mappingsmodel.MappingsModelTestTools; import org.eclipse.persistence.tools.workbench.framework.context.WorkbenchContext; import org.eclipse.persistence.tools.workbench.framework.uitools.ClasspathPanel; import org.eclipse.persistence.tools.workbench.mappingsplugin.MappingsPluginResourceBundle; import org.eclipse.persistence.tools.workbench.mappingsmodel.meta.MWClassRepository; import org.eclipse.persistence.tools.workbench.mappingsmodel.project.relational.MWRelationalProject; import org.eclipse.persistence.tools.workbench.uitools.app.ListAspectAdapter; import org.eclipse.persistence.tools.workbench.uitools.app.ListValueModel; import org.eclipse.persistence.tools.workbench.uitools.app.PropertyValueModel; import org.eclipse.persistence.tools.workbench.uitools.app.SimplePropertyValueModel; import org.eclipse.persistence.tools.workbench.utility.Classpath; import org.eclipse.persistence.tools.workbench.utility.io.FileTools; /** * Simple test class for playing around with the ClasspathPanel. */ public class ClasspathPanelTest { MWRelationalProject project; public static void main(String[] args) { new ClasspathPanelTest().exec(args); } private ClasspathPanelTest() { super(); } private void exec(String[] args) { this.project = this.buildProject(); JFrame frame = new JFrame(this.getClass().getName()); frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); frame.addWindowListener(this.buildWindowListener()); frame.getContentPane().add(this.buildMainPanel(), "Center"); frame.setSize(400, 400); frame.setVisible(true); } private MWRelationalProject buildProject() { MWRelationalProject result = new MWRelationalProject(this.getClass().getName(), MappingsModelTestTools.buildSPIManager(), null); Classpath cp = Classpath.javaClasspath(); Classpath.Entry[] entries = cp.getEntries(); for (int i = 0; i < entries.length; i++) { result.getRepository().addClasspathEntry(entries[i].fileName()); } return result; } private WindowListener buildWindowListener() { return new WindowAdapter() { public void windowClosing(WindowEvent e) { e.getWindow().setVisible(false); System.out.println("classpath:"); for (Iterator stream = ClasspathPanelTest.this.project.getRepository().classpathEntries(); stream.hasNext(); ) { System.out.print("\t"); System.out.print(stream.next()); System.out.println(); } System.out.println("*****"); System.exit(0); } }; } private JPanel buildMainPanel() { JPanel mainPanel = new JPanel(new BorderLayout()); mainPanel.add(this.buildClasspathPanel(), BorderLayout.CENTER); mainPanel.add(this.buildBackdoorButton(), BorderLayout.SOUTH); return mainPanel; } private ClasspathPanel buildClasspathPanel() { return new ClasspathPanel(this.buildWorkbenchContext().getApplicationContext(), this.buildEntriesHolder(), buildLocationHolder()); } private WorkbenchContext buildWorkbenchContext() { return new TestWorkbenchContext(MappingsPluginResourceBundle.class, "org.eclipse.persistence.tools.workbench.mappingsplugin.MappingsPluginIconResourceFileNameMap"); } private ListValueModel buildEntriesHolder() { return new ListAspectAdapter(MWClassRepository.CLASSPATH_ENTRIES_LIST, this.project.getRepository()) { protected ListIterator getValueFromSubject() { return ((MWClassRepository) this.subject).classpathEntries(); } protected int sizeFromSubject() { return ((MWClassRepository) this.subject).classpathEntriesSize(); } public void addItem(int index, Object item) { ((MWClassRepository) this.subject).addClasspathEntry(index, (String) item); } public void addItems(int index, List items) { ((MWClassRepository) this.subject).addClasspathEntries(index, items); } public Object removeItem(int index) { return ((MWClassRepository) this.subject).removeClasspathEntry(index); } public List removeItems(int index, int length) { return ((MWClassRepository) this.subject).removeClasspathEntries(index, length); } public Object replaceItem(int index, Object item) { return ((MWClassRepository) this.subject).replaceClasspathEntry(index, (String) item); } }; } private PropertyValueModel buildLocationHolder() { return new SimplePropertyValueModel(this.project.getSaveDirectory()); } private JButton buildBackdoorButton() { return new JButton(this.buildBackdoorAction()); } private Action buildBackdoorAction() { Action action = new AbstractAction("test backdoor") { public void actionPerformed(ActionEvent event) { ClasspathPanelTest.this.testBackdoor(); } }; action.setEnabled(true); return action; } /** * Add an entry to the repository directly; * the UI should update appropriately. */ void testBackdoor() { this.project.getRepository().addClasspathEntry(FileTools.CURRENT_WORKING_DIRECTORY_NAME); } }