blob: 3ef617346175401be5c0072a0c873aa8d4a84ca9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2016 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Ferenc Hechler, ferenc_hechler@users.sourceforge.net - 83258 [jar exporter] Deploy java application as executable jar
* Ferenc Hechler, ferenc_hechler@users.sourceforge.net - 213638 [jar exporter] create ANT build file for current settings
* Ferenc Hechler, ferenc_hechler@users.sourceforge.net - 219530 [jar application] add Jar-in-Jar ClassLoader option
*******************************************************************************/
package org.eclipse.jdt.internal.ui.jarpackagerfat;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jdt.internal.corext.util.Messages;
import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
/**
* Utility methods for Runnable JAR Import/Export.
*/
public final class FatJarPackagerUtil {
static final String ANTSCRIPT_EXTENSION= "xml"; //$NON-NLS-1$
private FatJarPackagerUtil() {
// Do nothing
}
public static boolean askToCreateAntScriptDirectory(final Shell parent, File directory) {
if (parent == null)
return false;
return queryDialog(parent, FatJarPackagerMessages.FatJarPackage_confirmCreate_title, Messages.format(FatJarPackagerMessages.FatJarPackageAntScript_confirmCreate_message, BasicElementLabels.getPathLabel(directory)));
}
private static boolean queryDialog(final Shell parent, final String title, final String message) {
Display display= parent.getDisplay();
if (display == null || display.isDisposed())
return false;
final boolean[] returnValue= new boolean[1];
Runnable runnable= new Runnable() {
@Override
public void run() {
returnValue[0]= MessageDialog.openQuestion(parent, title, message);
}
};
display.syncExec(runnable);
return returnValue[0];
}
public static byte[] readInputStream(InputStream is) throws IOException {
ByteArrayOutputStream result= new ByteArrayOutputStream();
byte[] buf= new byte[1024];
int cnt= is.read(buf);
while (cnt > 0) {
result.write(buf, 0, cnt);
cnt= is.read(buf);
}
return result.toByteArray();
}
/**
* Increments [nr] for files in the format "[name][_nr][.ext]".<br>
* Increment of "[name][.ext]" is "[name]_2[.ext]<br>
* Increment of "[name]_2[.ext]" is "[name]_3[.ext]<br>
* [.ext] might be empty<br>
*
* @param fileName the file name to increment
* @return incremented filename
*/
public static String nextNumberedFileName(String fileName) {
String name;
String number;
String ext;
if (fileName.matches(".*[_]\\d+[.][^.]*")) { //$NON-NLS-1$
name= fileName.replaceFirst("(.*)[_](\\d+)([.][^.]*)", "$1"); //$NON-NLS-1$ //$NON-NLS-2$
number= fileName.replaceFirst("(.*)[_](\\d+)([.][^.]*)", "$2"); //$NON-NLS-1$ //$NON-NLS-2$
ext= fileName.replaceFirst("(.*)[_](\\d+)([.][^.]*)", "$3"); //$NON-NLS-1$ //$NON-NLS-2$
} else if (fileName.matches(".*[.][^.]*")) { //$NON-NLS-1$
name= fileName.replaceFirst("(.*)([.][^.]*)", "$1"); //$NON-NLS-1$ //$NON-NLS-2$
number= "1"; //$NON-NLS-1$
ext= fileName.replaceFirst("(.*)([.][^.]*)", "$2"); //$NON-NLS-1$ //$NON-NLS-2$
} else {
name= fileName;
number= "1"; //$NON-NLS-1$
ext= ""; //$NON-NLS-1$
}
fileName= name + "_" + (Integer.parseInt(number) + 1) + ext; //$NON-NLS-1$
return fileName;
}
}