Java tutorial
/******************************************************************************* * Copyright (c) 2008 - 2014 Red Hat, Inc. and others. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.ws.jaxws.ui.utils; import java.io.File; import java.io.IOException; import java.net.URI; import java.util.jar.Attributes; import java.util.jar.JarFile; import org.eclipse.core.filesystem.EFS; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.JavaConventions; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.jboss.tools.ws.jaxws.core.util.StatusUtils; import org.jboss.tools.ws.jaxws.ui.JBossJAXWSUIMessages; import org.jboss.tools.ws.ui.JBossWSUIPlugin; /** * @author Grid Qian */ public class JBossWSUIUtils { private static String JAVA = ".java"; //$NON-NLS-1$ private static String CLASS = ".class"; //$NON-NLS-1$ private static final String WS_NATIVE_JAR = "jbossws-native-client.jar"; //$NON-NLS-1$ private static final String WS_CXF_JAR = "jbossws-cxf-client.jar"; //$NON-NLS-1$ private static final String WS_METRO_JAR = "jbossws-metro-client.jar"; //$NON-NLS-1$ private static final String CLIENT_FOLDER = "client"; //$NON-NLS-1$ private static final String CLIENT_AS7_FOLDER = "modules:org:jboss:ws:jaxws-client:main"; //$NON-NLS-1$ private static final String CLIENT_AS71_FOLDER = "modules:system:layers:base:org:jboss:ws:jaxws-client:main"; //$NON-NLS-1$ private static final String WS_IMPL = "Implementation-Title"; //$NON-NLS-1$ private static final String WS_VERSION = "Implementation-Version"; //$NON-NLS-1$ private static final String WS_JAR = "jbossws-client.jar"; //$NON-NLS-1$ public static String addAnotherNodeToPath(String currentPath, String newNode) { return currentPath + File.separator + newNode; } public static String addNodesToPath(String currentPath, String[] newNode) { String returnPath = currentPath; for (int i = 0; i < newNode.length; i++) { returnPath = returnPath + File.separator + newNode[i]; } return returnPath; } public static IStatus validateClassName(String name, IJavaElement context) { IStatus status = null; String[] sourceComplianceLevels = getSourceComplianceLevels(context); status = JavaConventions.validateClassFileName(name + CLASS, sourceComplianceLevels[0], sourceComplianceLevels[1]); if (status != null && status.getSeverity() == IStatus.ERROR) { return status; } File file = JBossWSCreationUtils.findFileByPath(name + JAVA, context.getJavaProject().getProject().getLocation().toOSString()); if (file != null && file.exists()) { status = StatusUtils.warningStatus(JBossJAXWSUIMessages.Error_JBossWS_GenerateWizard_ClassName_Same); } return status; } public static IStatus validatePackageName(String name, IJavaElement context) { IStatus status = null; if (context == null || !context.exists()) { status = JavaConventions.validatePackageName(name, JavaCore.VERSION_1_3, JavaCore.VERSION_1_3); if (status != null && !status.isOK()) { return status; } } String[] sourceComplianceLevels = getSourceComplianceLevels(context); status = JavaConventions.validatePackageName(name, sourceComplianceLevels[0], sourceComplianceLevels[1]); if (status != null && status.getSeverity() == IStatus.ERROR) { return status; } IPackageFragmentRoot[] roots = null; try { IResource[] srcFolders = JBossWSCreationUtils.getJavaSourceRoots(context.getJavaProject()); roots = new IPackageFragmentRoot[srcFolders.length]; int i = 0; for (IResource src : srcFolders) { roots[i] = context.getJavaProject().getPackageFragmentRoot(src); i++; } } catch (JavaModelException e) { JBossWSUIPlugin.log(e); } for (IPackageFragmentRoot root : roots) { if (root != null) { IPackageFragment pack = root.getPackageFragment(name); try { IPath rootPath = root.getPath(); IPath outputPath = root.getJavaProject().getOutputLocation(); if (rootPath.isPrefixOf(outputPath) && !rootPath.equals(outputPath)) { // if the bin folder is inside of our root, don't allow // to name a package // like the bin folder IPath packagePath = pack.getPath(); if (outputPath.isPrefixOf(packagePath)) { status = StatusUtils.warningStatus( JBossJAXWSUIMessages.Error_JBossWS_GenerateWizard_IsOutputFolder); return status; } } if (pack.exists()) { if (pack.containsJavaResources() || !pack.hasSubpackages()) { status = StatusUtils .warningStatus(JBossJAXWSUIMessages.Error_JBossWS_GenerateWizard_PackageExists); } else { status = StatusUtils.warningStatus( JBossJAXWSUIMessages.Error_JBossWS_GenerateWizard_PackageNotShown); } return status; } else { if (pack.getResource() == null) { continue; } URI location = pack.getResource().getLocationURI(); if (location != null) { IFileStore store = EFS.getStore(location); if (store.fetchInfo().exists()) { status = StatusUtils.warningStatus( JBossJAXWSUIMessages.Error_JBossWS_GenerateWizard_PackageExistsDifferentCase); return status; } } } } catch (CoreException e) { JBossWSUIPlugin.log(e); } } } return status; } public static String[] getSourceComplianceLevels(IJavaElement context) { if (context != null) { IJavaProject javaProject = context.getJavaProject(); if (javaProject != null) { return new String[] { javaProject.getOption(JavaCore.COMPILER_SOURCE, true), javaProject.getOption(JavaCore.COMPILER_COMPLIANCE, true) }; } } return new String[] { JavaCore.getOption(JavaCore.COMPILER_SOURCE), JavaCore.getOption(JavaCore.COMPILER_COMPLIANCE) }; } public static String[] getWSRuntimeDetail(String serverHome) { String[] strs = null; File jbosswsHomeDir = new File(serverHome); String jarPath = JBossWSUIUtils.addNodesToPath(jbosswsHomeDir.getAbsolutePath(), new String[] { CLIENT_FOLDER, WS_CXF_JAR }); strs = getWSRuntimeDetailFromPath(jarPath); if (strs != null) { return strs; } jarPath = JBossWSUIUtils.addNodesToPath(jbosswsHomeDir.getAbsolutePath(), new String[] { CLIENT_FOLDER, WS_NATIVE_JAR }); strs = getWSRuntimeDetailFromPath(jarPath); if (strs != null) { return strs; } jarPath = JBossWSUIUtils.addNodesToPath(jbosswsHomeDir.getAbsolutePath(), new String[] { CLIENT_FOLDER, WS_METRO_JAR }); strs = getWSRuntimeDetailFromPath(jarPath); if (strs != null) { return strs; } jarPath = JBossWSUIUtils.addNodesToPath(jbosswsHomeDir.getAbsolutePath(), new String[] { CLIENT_FOLDER, WS_JAR }); strs = getWSRuntimeDetailFromPath(jarPath); if (strs != null) { return strs; } String as7 = JBossWSUIUtils.addNodesToPath(jbosswsHomeDir.getAbsolutePath(), CLIENT_AS7_FOLDER.split(":")); //$NON-NLS-1$ File as7File = new File(as7); if (as7File.exists() && as7File.isDirectory()) { File[] files = as7File.listFiles(); String jarName = ""; //$NON-NLS-1$ for (int i = 0; i < files.length; i++) { jarName = files[i].getName(); if (jarName.contains(WS_CXF_JAR.substring(0, WS_CXF_JAR.length() - 5)) || jarName.contains(WS_CXF_JAR.substring(0, WS_NATIVE_JAR.length() - 5)) || jarName.contains(WS_CXF_JAR.substring(0, WS_METRO_JAR.length() - 5))) { strs = getWSRuntimeDetailFromPath(files[i].getAbsolutePath()); if (strs != null) { return strs; } } } } String as71 = JBossWSUIUtils.addNodesToPath(jbosswsHomeDir.getAbsolutePath(), CLIENT_AS71_FOLDER.split(":")); //$NON-NLS-1$ File as71File = new File(as71); if (as71File.exists() && as71File.isDirectory()) { File[] files71 = as71File.listFiles(); String jarName71 = ""; //$NON-NLS-1$ for (int i = 0; i < files71.length; i++) { jarName71 = files71[i].getName(); if (jarName71.contains(WS_CXF_JAR.substring(0, WS_CXF_JAR.length() - 5)) || jarName71.contains(WS_CXF_JAR.substring(0, WS_NATIVE_JAR.length() - 5)) || jarName71.contains(WS_CXF_JAR.substring(0, WS_METRO_JAR.length() - 5))) { strs = getWSRuntimeDetailFromPath(files71[i].getAbsolutePath()); if (strs != null) { return strs; } } } } return new String[] { "", "" }; //$NON-NLS-1$ //$NON-NLS-2$; } public static String[] getWSRuntimeDetailFromPath(String path) { File jarFile = new File(path); if (!jarFile.isFile()) { return null; } String[] strs = new String[] { "", "" }; //$NON-NLS-1$ //$NON-NLS-2$ JarFile jar = null; try { jar = new JarFile(jarFile); Attributes attributes = jar.getManifest().getMainAttributes(); strs[0] = attributes.getValue(WS_IMPL); strs[1] = attributes.getValue(WS_VERSION); } catch (IOException e) { return strs; } finally { if (jar != null) { try { jar.close(); } catch (IOException e) { // ignore } } } return strs; } public static Label[] createWSRuntimeDetailsGroup(Composite root, int horizontalSpan) { Group wsRuntimeDetails = new Group(root, SWT.NONE); wsRuntimeDetails.setText(JBossJAXWSUIMessages.Runtime_Details); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = horizontalSpan; wsRuntimeDetails.setLayout(new GridLayout(2, false)); wsRuntimeDetails.setLayoutData(gd); new Label(wsRuntimeDetails, SWT.NONE).setText(JBossJAXWSUIMessages.Runtime_Details_Impl); Label impl = new Label(wsRuntimeDetails, SWT.NONE); gd = new GridData(GridData.FILL_HORIZONTAL); impl.setLayoutData(gd); new Label(wsRuntimeDetails, SWT.NONE).setText(JBossJAXWSUIMessages.Runtime_Details_Version); Label vDetail = new Label(wsRuntimeDetails, SWT.NONE); gd = new GridData(GridData.FILL_HORIZONTAL); vDetail.setLayoutData(gd); Label[] labels = new Label[] { impl, vDetail }; return labels; } }