All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gdt.data.grain.Support Maven / Gradle / Ivy

package gdt.data.grain;
/*
 * Copyright 2016 Alexander Imas
 * This file is part of JEntigrator.

    JEntigrator is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    JEntigrator 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 for more details.

    You should have received a copy of the GNU General Public License
    along with JEntigrator.  If not, see .
 */
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Stack;
import java.util.Vector;
import java.util.logging.Logger;
import org.apache.commons.codec.binary.Base64;

import gdt.data.entity.facet.ExtensionHandler;
import gdt.data.store.Entigrator;
/**
* The class collects general-purpose methods. 
* @author  Alexander Imas
* @version 1.0
* @since   2016-03-11
*/

public class Support {
	static boolean debug=false;
    private static boolean itemExists(String name, Vector vec) {
        if (name == null)
            return false;
        if (vec == null)
            return false;
        int cnt = vec.size();
        for (int i = 0; i < cnt; i++) {
            if (name.compareTo((String) vec.get(i)) == 0)
                return true;
        }
        return false;
    }
    /**
   	 * Add a string into the vector.
   	 * @param name$ the string
   	 * @param vec vector of strings. 
	 * @return 0 if success,-1 otherwise.   
   	 */
    public static int addItem(String name$, Vector vec) {
        if (name$ == null)
            return -1;
        if (vec == null)
            return -1;
        if (Support.itemExists(name$, vec))
            return 0;
        vec.addElement(name$);
        return 0;
    }
    /**
   	 * Sort array of strings
   	 * @param sa string array 
   	 */
    public static void sortStrings(String[] sa) {
        String s;
        boolean greater = false;
        for (int i = sa.length; --i >= 0; ) {
            boolean flipped = false;
            for (int j = 0; j < i; j++) {
                greater = false;
                if (sa[j] == null)
                    sa[j] = "null";
                if (sa[j + 1] == null)
                    sa[j + 1] = "null";
                if (sa[j].equals("null")) {
                    greater = false;
                    continue;
                }
                if (sa[j + 1].equals("null")) {
                    greater = true;
                    continue;
                }
                if (sa[j].compareToIgnoreCase(sa[j + 1]) > 0)
                    greater = true;
                if (greater) {
                    s = sa[j];
                    sa[j] = sa[j + 1];
                    sa[j + 1] = s;
                    flipped = true;
                }
            }
            if (!flipped)
                return;
        }
    }
    private static String transamp(String string$) {
        if (string$ == null)
            return null;
        return  string$.replaceAll("&", "&");
    }
    /**
   	 * Replace special characters in XML string. 
   	 * @param string$ original string
   	 * @return converted string. 
   	 */ 
    public static String translate(String string$) {
        if (string$ == null)
            return null;
        String ret$ = transamp(string$);
        ret$ = ret$.replaceAll(">", ">");
        ret$ = ret$.replaceAll("<", "<");
        ret$ = ret$.replaceAll("\"", """);
        ret$ = ret$.replaceAll("\n", "
");
        ret$ = ret$.replaceAll("'", "'");
 
        return ret$;
    }
    /**
   	 * Get value from the hash table by key string  
   	 * @param keyName key string
   	 * @param tab hash table.
   	 * @return found value or null. 
   	 */ 
  public static Object getValue(String keyName, Hashtable tab) {
        if (keyName == null)
            return null;
        if (tab == null)
            return null;
        Enumeration en = tab.keys();
        String curKey = null;
        while (en.hasMoreElements()) {
            curKey = (String) en.nextElement();
            if (keyName.compareTo(curKey) == 0)
                return tab.get(curKey);
        }
        return null;
    }
  /**
 	 * Remove the key and the associated value from the 
 	 * hash table. 
 	 * @param keyName key string
 	 * @param tab hash table.
 	 */ 
    public static void removeKey(String keyName, Hashtable tab) {
        if (keyName == null)
            return;
        if (tab == null)
            return;
        Enumeration en = tab.keys();
        String curKey = null;
        while (en.hasMoreElements()) {
            curKey = (String) en.nextElement();
            if (keyName.compareTo(curKey) == 0) {
                tab.remove(curKey);
                break;
            }
        }

    }
    /**
 	 * Get class resource as input stream. 
 	 * @param handler the class
 	 * @param resource$ the resource name.
 	 * @return input stream.
 	 */ 
    public static InputStream getClassResource(Class handler,String resource$){
    	try {
    		InputStream is=handler.getResourceAsStream(resource$);
        	if(is!=null){
        		if(debug)
        		  System.out.println("Support:getClassResource:resource stream="+is.toString());
        		return is;
        	}
        	else{
        	if(debug)
        		  System.out.println("Support:getClassResource:cannot get embedded resource stream for handler="+handler.getName());            		
        	ClassLoader classLoader=handler.getClassLoader();
        		is=classLoader.getResourceAsStream(resource$);
    		if(is!=null)
    		 if(debug)
        		  System.out.println("Support:getClassResource:resourse stream="+is.toString());
    		else
    			if(debug)
    			System.out.println("Support:getClassResource:cannot get resource stream");
        	String handler$=handler.getName();
        	if(debug)
        		System.out.println("Support:getClassResource:class="+handler$);
    		String handlerName$=handler.getSimpleName();
    		if(debug)
    			System.out.println("Support:getClassResource:class name="+handlerName$);
    		String handlerPath$=handler$.replace(".", "/");
    		if(debug)
    			System.out.println("Support:getClassResource:class path="+handlerPath$);
    		String resourcePath$="src/"+handlerPath$.replace(handlerName$, resource$);
    		if(debug)
    			System.out.println("Support:getClassResource:resource path="+resourcePath$);
    		ClassLoader classloader = Thread.currentThread().getContextClassLoader();
            URL resourceUrl= classloader.getResource(resourcePath$);
            if(resourceUrl!=null){
            	if(debug)
            		System.out.println("Support:getClassResource:resource URL="+resourceUrl.toString());
                return resourceUrl.openStream();
            }
            else{
            	if(debug)
            		System.out.println("Support:getClassResource:cannot get resource URL");            	
            }
        	}
    	} catch (Exception e) {
 			Logger.getLogger(gdt.data.grain.Support.class.getName()).severe(e.toString());
 		}
 		return null;
    }
    /**
 	 * Get an icon encoded as Base64 string located as file in the class path.
 	 * @param entigrator the entigrator. 
 	 * @param handler the class
 	 * @param iconResource$ the name of the icon file.
 	 * @return input stream.
 	 */ 
   
    public static String readHandlerIcon(Entigrator entigrator,Class handler,String iconResource$) {
 		try {
 		if(debug)	
 			System.out.println("Support:readHandlerIcon:handler="+handler.getName()+" icon="+iconResource$);
 			//InputStream is=handler.getResourceAsStream(icon$);
 			InputStream is= getClassResource(handler,iconResource$);
 			if(is!=null){
 			ByteArrayOutputStream bos = new ByteArrayOutputStream();
 	            byte[] b = new byte[1024];
 	            int bytesRead = 0;
 	            while ((bytesRead = is.read(b)) != -1) {
 	               bos.write(b, 0, bytesRead);
 	            }
 	            byte[] ba = bos.toByteArray();
 	            is.close();
 	           return Base64.encodeBase64String(ba);
 			}else
 			{
 				if(entigrator==null){
 					if(debug)
 					System.out.println("Support:readHandlerIcon:entigrator is null");
 				return null;
 				}
 				String [] sa=entigrator.indx_listEntities("entity", "extension");
 				if(sa!=null){
 				String icon$=null;
 				for(String s:sa){
 				   icon$=ExtensionHandler.loadIcon(entigrator, s, iconResource$);
 				   if(icon$!=null)
 					   return icon$;
 				}
 				}
 			}
 		} catch (Exception e) {
 			Logger.getLogger(gdt.data.grain.Support.class.getName()).severe(e.toString());
 		}
 		return null;
 	}
    /**
 	 * Copy the icon file from the class path into the target directory. 
 	 * @param handler the class
 	 * @param icon$ the name of the icon file.
 	 *  @param directory$ the icons directory path .
 	 */    
    public static void addHandlerIcon(Class handler,String icon$,String directory$) {
 		try {
 			
 			File iconFile=new File(directory$+"/"+icon$);
 			if(iconFile.exists())
 				return;
 			iconFile.createNewFile();
 			InputStream is=handler.getResourceAsStream(icon$);
 			FileOutputStream fos=new FileOutputStream(iconFile);
 	            byte[] b = new byte[1024];
 	            int bytesRead = 0;
 	            while ((bytesRead = is.read(b)) != -1) {
 	               fos.write(b, 0, bytesRead);
 	            }
 	            is.close();
 	            fos.close();
 		} catch (Exception e) {
 			Logger.getLogger(gdt.data.grain.Support.class.getName()).severe(e.toString());
 		}
 	}
    /**
 	 * Intersect two string arrays 
 	 * @param list1 first array
 	 * @param list2 second array
 	 * @return the result string array.
 	 */  
    public static String[] intersect(String[] list1, String[] list2) {
        if (list2 == null || list1 == null) {
            return null;
        }
        Stack s1 = new Stack();
        Stack s2 = new Stack();
        for (String aList2 : list2) s2.push(aList2);
        String line$ ;
        boolean found ;
        String member$ = null;
        while (!s2.isEmpty()) {
            try {
                found = false;
                line$ = s2.pop().toString();
                if (line$ == null)
                    continue;
                for (String aList1 : list1) {
                    member$ = aList1;
                    if (line$.equals(member$)) {
                        found = true;
                        break;
                    }
                }
                if (found)
             Support.addItem(member$, s1);
                       
            } catch (Exception e) {
                Logger.getLogger(Support.class.getName()).info("intersect:"+e.toString());
            }
        }
        return s1.toArray(new String[0]); 
        
    }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy