emptytestmeprojectwizarditerator.java.svn-base
来自「cqME :java framework for TCK test.」· SVN-BASE 代码 · 共 236 行
SVN-BASE
236 行
/*
* $Id$
*
* Copyright 2007 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 only, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License version 2 for more details (a copy is
* included at /legal/license.txt).
*
* You should have received a copy of the GNU General Public License
* version 2 along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 or visit www.sun.com if you need additional
* information or have any questions.
*
*/
package com.sun.testme.project.templates;
import java.awt.Component;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.text.MessageFormat;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import javax.swing.JComponent;
import javax.swing.event.ChangeListener;
import org.netbeans.api.project.ProjectManager;
import org.netbeans.spi.project.ui.support.ProjectChooser;
import org.netbeans.spi.project.ui.templates.support.Templates;
import org.openide.WizardDescriptor;
import org.openide.filesystems.FileLock;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.util.NbBundle;
public class EmptyTestMEProjectWizardIterator implements WizardDescriptor.InstantiatingIterator {
private int index;
private WizardDescriptor.Panel[] panels;
private WizardDescriptor wiz;
public EmptyTestMEProjectWizardIterator() {}
public static EmptyTestMEProjectWizardIterator createIterator() {
return new EmptyTestMEProjectWizardIterator();
}
private WizardDescriptor.Panel[] createPanels() {
return new WizardDescriptor.Panel[] {
new EmptyTestMEProjectWizardPanel(),
};
}
private String[] createSteps() {
return new String[] {
NbBundle.getMessage(EmptyTestMEProjectWizardIterator.class, "LBL_CreateProjectStep")
};
}
public Set/*<FileObject>*/ instantiate() throws IOException {
Set resultSet = new LinkedHashSet();
File dirF = FileUtil.normalizeFile((File) wiz.getProperty("projdir"));
dirF.mkdirs();
FileObject template = Templates.getTemplate(wiz);
FileObject dir = FileUtil.toFileObject(dirF);
unZipFile(template.getInputStream(), dir);
// Always open top dir as a project:
resultSet.add(dir);
// Look for nested projects to open as well:
Enumeration e = dir.getFolders(true);
while (e.hasMoreElements()) {
FileObject subfolder = (FileObject) e.nextElement();
if (ProjectManager.getDefault().isProject(subfolder)) {
resultSet.add(subfolder);
}
}
File parent = dirF.getParentFile();
if (parent != null && parent.exists()) {
ProjectChooser.setProjectsFolder(parent);
}
return resultSet;
}
public void initialize(WizardDescriptor wiz) {
this.wiz = wiz;
index = 0;
panels = createPanels();
// Make sure list of steps is accurate.
String[] steps = createSteps();
for (int i = 0; i < panels.length; i++) {
Component c = panels[i].getComponent();
if (steps[i] == null) {
// Default step name to component name of panel.
// Mainly useful for getting the name of the target
// chooser to appear in the list of steps.
steps[i] = c.getName();
}
if (c instanceof JComponent) { // assume Swing components
JComponent jc = (JComponent) c;
// Step #.
jc.putClientProperty("WizardPanel_contentSelectedIndex", new Integer(i));
// Step name (actually the whole list for reference).
jc.putClientProperty("WizardPanel_contentData", steps);
}
}
}
public void uninitialize(WizardDescriptor wiz) {
this.wiz.putProperty("projdir",null);
this.wiz.putProperty("name",null);
this.wiz = null;
panels = null;
}
public String name() {
return MessageFormat.format("{0} of {1}",
new Object[] {new Integer(index + 1), new Integer(panels.length)});
}
public boolean hasNext() {
return index < panels.length - 1;
}
public boolean hasPrevious() {
return index > 0;
}
public void nextPanel() {
if (!hasNext()) {
throw new NoSuchElementException();
}
index++;
}
public void previousPanel() {
if (!hasPrevious()) {
throw new NoSuchElementException();
}
index--;
}
public WizardDescriptor.Panel current() {
return panels[index];
}
// If nothing unusual changes in the middle of the wizard, simply:
public final void addChangeListener(ChangeListener l) {}
public final void removeChangeListener(ChangeListener l) {}
private static void unZipFile(InputStream source, FileObject projectRoot) throws IOException {
HashMap replaceTokens = new HashMap();
replaceTokens.put("@@TESTSUITE_NAME@@", projectRoot.getName());
replaceTokens.put("@@TESTSUITE_ID@@", projectRoot.getName());
try {
ZipInputStream str = new ZipInputStream(source);
ZipEntry entry;
while ((entry = str.getNextEntry()) != null) {
if (entry.isDirectory()) {
FileUtil.createFolder(projectRoot, entry.getName());
} else {
String fileName = entry.getName();
FileObject fo = FileUtil.createData(projectRoot, fileName);
FileLock lock = fo.lock();
try {
OutputStream out = fo.getOutputStream(lock);
try {
if (fileName.equals("testsuite.jtt")) {
copyAndSubstituteTokens(str, out, replaceTokens);
} else {
FileUtil.copy(str, out);
}
} finally {
out.close();
}
} finally {
lock.releaseLock();
}
}
}
} finally {
source.close();
}
}
private static void copyAndSubstituteTokens(InputStream is, OutputStream os, Map tokens) throws IOException {
PrintWriter pw = new PrintWriter(os);
try {
Reader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
String line;
while ((line = br.readLine()) != null) {
pw.println(tokens == null ? line : replaceTokens(tokens, line));
}
} finally {
pw.close();
}
}
private static String replaceTokens(Map tokens, String line) {
for (Iterator it = tokens.entrySet().iterator(); it.hasNext(); ) {
Map.Entry entry = (Map.Entry) it.next();
line = line.replaceAll((String) entry.getKey(), (String) entry.getValue());
}
return line;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?