2 * ============LICENSE_START==========================================
4 * ===================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ===================================================================
8 * Unless otherwise specified, all software contained herein is licensed
9 * under the Apache License, Version 2.0 (the "License");
10 * you may not use this software except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
21 * Unless otherwise specified, all documentation contained herein is licensed
22 * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
23 * you may not use this documentation except in compliance with the License.
24 * You may obtain a copy of the License at
26 * https://creativecommons.org/licenses/by/4.0/
28 * Unless required by applicable law or agreed to in writing, documentation
29 * distributed under the License is distributed on an "AS IS" BASIS,
30 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31 * See the License for the specific language governing permissions and
32 * limitations under the License.
34 * ============LICENSE_END============================================
41 import java.io.FileOutputStream;
42 import java.io.IOException;
43 import java.io.InputStream;
44 import java.io.OutputStream;
45 import java.io.Reader;
46 import java.io.Writer;
48 import java.util.Objects;
49 import java.util.jar.JarEntry;
50 import java.util.jar.JarInputStream;
51 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
54 public class ExtractJar {
55 private static final int BUFFER_SIZE = 8192;
56 private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ExtractJar.class);
58 public static void main(String[] args) {
59 if (args.length > 0 && args[0] != null && args[0].length() > 0)
60 extractFilesFromJar(args[0]);
62 logger.info("Current Directory is taken as webapp path");
63 String currentDir = new File(".").getAbsolutePath();
64 extractFilesFromJar(currentDir);
68 @SuppressWarnings("ResultOfMethodCallIgnored")
69 public static void extractFilesFromJar(String directory) {
71 Class clazz = ExtractJar.class;
72 URL jarUrl = clazz.getProtectionDomain().getCodeSource().getLocation();
74 try(JarInputStream entryStream = new JarInputStream(jarUrl.openStream())){
76 entry = entryStream.getNextJarEntry();
78 logger.info("Raptor setup complete");
79 if (!Objects.requireNonNull(entry).getName().contains("jarutil")) {
80 logger.info(entry.getName());
81 File file = new File(directory, entry.getName());
82 if (entry.isDirectory() && !file.exists()) {
85 // make directory (some jars don't list dirs)
86 File dir = new File(file.getParent());
92 FileOutputStream fos = new FileOutputStream(file);
93 copy(entryStream, fos);
97 if (entry.getTime() >= 0)
98 file.setLastModified(entry.getTime());
102 entryStream.closeEntry();
103 logger.info("Raptor setup complete");
104 }catch(Exception e) {
105 logger.error("Exception in extractFilesFromJar",e);
110 public static void copy(InputStream in, OutputStream out, long byteCount) throws IOException {
111 byte[] buffer = new byte[BUFFER_SIZE];
113 if (byteCount >= 0) {
114 while (byteCount > 0) {
115 if (byteCount < BUFFER_SIZE)
116 len = in.read(buffer, 0, (int) byteCount);
118 len = in.read(buffer, 0, BUFFER_SIZE);
123 out.write(buffer, 0, len);
127 len = in.read(buffer, 0, BUFFER_SIZE);
130 out.write(buffer, 0, len);
135 /* ------------------------------------------------------------------- */
137 * Copy Reader to Writer for byteCount bytes or until EOF or exception.
139 public static void copy(Reader in, Writer out, long byteCount) throws IOException {
140 char[] buffer = new char[BUFFER_SIZE];
142 if (byteCount >= 0) {
143 while (byteCount > 0) {
144 if (byteCount < BUFFER_SIZE)
145 len = in.read(buffer, 0, (int) byteCount);
147 len = in.read(buffer, 0, BUFFER_SIZE);
152 out.write(buffer, 0, len);
156 len = in.read(buffer, 0, BUFFER_SIZE);
159 out.write(buffer, 0, len);
164 /* ------------------------------------------------------------------- */
166 * Copy Stream in to Stream out until EOF or exception.
168 public static void copy(InputStream in, OutputStream out) throws IOException {
172 // Deletes all files and subdirectories under dir.
173 // Returns true if all deletions were successful.
174 // If a deletion fails, the method stops attempting to delete and returns false.
175 public static boolean deleteDir(File dir) {
176 if (dir.isDirectory()) {
177 String[] children = dir.list();
178 assert children != null;
179 for (String child : children) {
180 boolean success = deleteDir(new File(dir, child));
187 // The directory is now empty so delete it