1 package org.opendaylight.mwtn.base.internalTypes;
4 import java.io.BufferedReader;
6 import java.io.FileFilter;
7 import java.io.FileInputStream;
8 import java.io.FileOutputStream;
9 import java.io.IOException;
10 import java.io.InputStream;
11 import java.io.InputStreamReader;
12 import java.io.OutputStream;
13 import java.net.MalformedURLException;
14 import java.net.URISyntaxException;
16 import java.util.ArrayList;
17 import java.util.Enumeration;
18 import java.util.List;
20 import org.json.JSONException;
21 import org.json.JSONObject;
22 import org.osgi.framework.Bundle;
23 import org.osgi.framework.FrameworkUtil;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
27 public class Resources {
29 private static final Logger LOG = LoggerFactory.getLogger(Resources.class);
32 private static URL getFileURL(String resFile)
34 Bundle b = FrameworkUtil.getBundle(Resources.class);
38 LOG.warn("cannot load bundle resources");
40 u=new File("src/main/resources"+resFile).toURI().toURL();
41 } catch (MalformedURLException e) {
42 LOG.warn(e.getMessage());
46 u= b.getEntry(resFile);
50 private static File getFile(String resFile)
52 Bundle b = FrameworkUtil.getBundle(Resources.class);
56 LOG.warn("cannot load bundle resources");
57 f=new File("src/main/resources"+resFile);
60 f=new File(b.getEntry(resFile).toURI());
61 } catch (URISyntaxException e) {
67 private static String readFile(final URL u) throws IOException
69 return readFile(u.openStream());
71 private static String readFile(final File f) throws IOException
73 return readFile(new FileInputStream(f));
75 private static String readFile(final InputStream s) throws IOException
78 BufferedReader in = new BufferedReader(new InputStreamReader(s));
79 StringBuilder sb=new StringBuilder();
81 while ((inputLine = in.readLine()) != null)
90 public static String getFileContent(String resFile) throws IOException
92 return readFile(getFileURL(resFile));
94 public static List<File> getFiles(String folder,final String filter,final boolean recursive)
96 List<File> list=new ArrayList<File>();
97 FileFilter ff=new FileFilter() {
100 public boolean accept(File pathname) {
101 if(pathname.isFile())
102 return pathname.getName().contains(filter);
107 File ffolder=getFile(folder);
108 if(ffolder!=null && ffolder.isDirectory())
110 File[] files=ffolder.listFiles(ff);
111 if(files!=null && files.length>0)
117 else if(f.isDirectory() && recursive)
119 getFilesRecursive(f,ff,list);
126 public static List<URL> getFileURLs(String folder,final String filter,final boolean recursive) throws IOException
128 Bundle b = FrameworkUtil.getBundle(Resources.class);
129 List<URL> list=new ArrayList<URL>();
132 FileFilter ff=new FileFilter() {
135 public boolean accept(File pathname) {
136 if(pathname.isFile())
137 return pathname.getName().contains(filter);
142 File ffolder=getFile(folder);
143 if(ffolder!=null && ffolder.isDirectory())
145 File[] files=ffolder.listFiles(ff);
146 if(files!=null && files.length>0)
151 list.add(f.toURI().toURL());
152 else if(f.isDirectory() && recursive)
154 getFileURLsRecursive(f,ff,list);
162 getResourceURLsTreeRecurse(b,filter,b.getEntryPaths(folder),recursive,list);
166 private static void getFilesRecursive(File root, FileFilter ff, List<File> list) {
167 if(root!=null && root.isDirectory())
169 File[] files=root.listFiles(ff);
170 if(files!=null && files.length>0)
176 else if(f.isDirectory())
178 getFilesRecursive(f,ff,list);
185 private static void getFileURLsRecursive(File root, FileFilter ff, List<URL> list) throws MalformedURLException {
186 if(root!=null && root.isDirectory())
188 File[] files=root.listFiles(ff);
189 if(files!=null && files.length>0)
194 list.add(f.toURI().toURL());
195 else if(f.isDirectory())
197 getFileURLsRecursive(f,ff,list);
204 private static void getResourceURLsTreeRecurse(Bundle b, String filter, Enumeration<String> resource,boolean recursive,List<URL> outp) throws IOException {
205 while (resource.hasMoreElements()) {
206 String name = resource.nextElement();
207 Enumeration<String> list = b.getEntryPaths(name);
210 getResourceURLsTreeRecurse(b, filter, list,recursive,outp);
213 if(name.contains(filter))
215 LOG.debug("add "+name+ " to list");
216 outp.add(b.getEntry(name));
219 LOG.debug("filtered out "+name);
223 public static List<JSONObject> getJSONFiles(String folder,boolean recursive)
227 urls = getFileURLs(folder,".json",recursive);
228 } catch (IOException e1) {
229 LOG.warn("failed to get urls from resfolder "+folder+" : "+e1.getMessage());
231 LOG.debug("found "+urls==null?"no":urls.size()+" files");
232 List<JSONObject> list=new ArrayList<JSONObject>();
237 LOG.debug("try to parse "+u.toString());
239 JSONObject o=new JSONObject(readFile(u));
241 } catch (JSONException | IOException e) {
242 LOG.warn("problem reading/parsing file "+u+" :"+e.getMessage());
248 public static JSONObject getJSONFile(String resFile) {
249 LOG.debug("loading json file "+resFile+" from res");
250 URL u=getFileURL(resFile);
253 LOG.warn("cannot find resfile: "+resFile);
259 //parse to jsonobject
260 o=new JSONObject(readFile(u));
264 LOG.warn("problem reading/parsing file: "+e.getMessage());
269 public static boolean extractFileTo(String resFile, File oFile) {
272 LOG.debug("try to copy "+resFile+" from res to "+oFile.getAbsolutePath());
273 URL u=getFileURL(resFile);
276 LOG.warn("cannot find resfile:"+resFile);
280 InputStream in = u.openStream();
281 oFile.getParentFile().mkdirs();
282 OutputStream outStream;
283 outStream = new FileOutputStream(oFile);
285 while ((theInt = in.read()) >= 0) {
286 outStream.write(theInt);
291 LOG.debug("file written successfully");
293 catch (IOException e) {
294 LOG.error("problem writing file:"+e.getMessage());