001package org.maltparser.core.lw.helper; 002 003import java.io.FileNotFoundException; 004import java.io.IOException; 005import java.io.InputStream; 006import java.io.InputStreamReader; 007import java.io.UnsupportedEncodingException; 008import java.net.JarURLConnection; 009import java.net.MalformedURLException; 010import java.net.URL; 011import java.util.Iterator; 012import java.util.jar.JarEntry; 013import java.util.jar.JarFile; 014import java.util.jar.JarInputStream; 015 016import org.maltparser.core.exception.MaltChainedException; 017import org.maltparser.core.io.dataformat.ColumnDescription; 018import org.maltparser.core.io.dataformat.DataFormatInstance; 019import org.maltparser.core.symbol.SymbolTableHandler; 020import org.maltparser.core.syntaxgraph.DependencyGraph; 021import org.maltparser.core.syntaxgraph.node.TokenNode; 022 023/** 024 * @author Johan Hall 025 * 026 */ 027public final class Utils { 028 public static JarFile getConfigJarfile(URL url) { 029 JarFile mcoFile = null; 030 try { 031 JarURLConnection conn = (JarURLConnection)new URL("jar:" + url.toString() + "!/").openConnection(); 032 mcoFile = conn.getJarFile(); 033 } catch (IOException e) { 034 e.printStackTrace(); 035 } 036 037 return mcoFile; 038 } 039 040 public static JarEntry getConfigFileEntry(JarFile mcoJarFile, String mcoName, String fileName) { 041 042 JarEntry entry = mcoJarFile.getJarEntry(mcoName+'/'+fileName); 043 if (entry == null) { 044 entry = mcoJarFile.getJarEntry(mcoName+'\\'+fileName); 045 } 046 return entry; 047 } 048 049 public static InputStream getInputStreamFromConfigFileEntry(URL mcoURL, String mcoName, String fileName) { 050 JarFile mcoJarFile = getConfigJarfile(mcoURL); 051 JarEntry entry = getConfigFileEntry(mcoJarFile, mcoName, fileName); 052 053 try { 054 if (entry == null) { 055 throw new FileNotFoundException(); 056 } 057 return mcoJarFile.getInputStream(entry); 058 } catch (FileNotFoundException e) { 059 e.printStackTrace(); 060 } catch (IOException e) { 061 e.printStackTrace(); 062 } 063 return null; 064 } 065 066 public static InputStreamReader getInputStreamReaderFromConfigFileEntry(URL mcoURL, String mcoName, String fileName, String charSet) { 067 try { 068 return new InputStreamReader(getInputStreamFromConfigFileEntry(mcoURL, mcoName, fileName), charSet); 069 } catch (UnsupportedEncodingException e) { 070 e.printStackTrace(); 071 } 072 return null; 073 } 074 075 public static URL getConfigFileEntryURL(URL mcoURL, String mcoName, String fileName) { 076 try { 077 URL url = new URL("jar:"+mcoURL.toString()+"!/"+mcoName+'/'+fileName + "\n"); 078 try { 079 InputStream is = url.openStream(); 080 is.close(); 081 } catch (IOException e) { 082 url = new URL("jar:"+mcoURL.toString()+"!/"+mcoName+'\\'+fileName + "\n"); 083 } 084 return url; 085 } catch (MalformedURLException e) { 086 e.printStackTrace(); 087 } 088 return null; 089 } 090 091 public static String getInternalParserModelName(URL mcoUrl) { 092 String internalParserModelName = null; 093 try { 094 JarEntry je; 095 JarInputStream jis = new JarInputStream(mcoUrl.openConnection().getInputStream()); 096 097 while ((je = jis.getNextJarEntry()) != null) { 098 String fileName = je.getName(); 099 jis.closeEntry(); 100 int index = fileName.indexOf('/'); 101 if (index == -1) { 102 index = fileName.indexOf('\\'); 103 } 104 if (internalParserModelName == null) { 105 internalParserModelName = fileName.substring(0, index); 106 break; 107 } 108 } 109 jis.close(); 110 } catch (IOException e) { 111 e.printStackTrace(); 112 } 113 return internalParserModelName; 114 } 115 116 public static String[] toStringArray(DependencyGraph graph, DataFormatInstance dataFormatInstance, SymbolTableHandler symbolTables) throws MaltChainedException { 117 String[] tokens = new String[graph.nTokenNode()]; 118 StringBuilder sb = new StringBuilder(); 119 Iterator<ColumnDescription> columns = dataFormatInstance.iterator(); 120 for (Integer index : graph.getTokenIndices()) { 121 sb.setLength(0); 122 if (index <= tokens.length) { 123 ColumnDescription column = null; 124 TokenNode node = graph.getTokenNode(index); 125 while (columns.hasNext()) { 126 column = columns.next(); 127 if (column.getCategory() == ColumnDescription.INPUT) { 128 if (!column.getName().equals("ID")) { 129 if (node.hasLabel(symbolTables.getSymbolTable(column.getName())) && node.getLabelSymbol(symbolTables.getSymbolTable(column.getName())).length() > 0) { 130 sb.append(node.getLabelSymbol(symbolTables.getSymbolTable(column.getName()))); 131 } else { 132 sb.append('_'); 133 } 134 } else { 135 sb.append(index.toString()); 136 } 137 sb.append('\t'); 138 } 139 } 140 sb.setLength(sb.length()-1); 141 tokens[index-1] = sb.toString(); 142 columns = dataFormatInstance.iterator(); 143 } 144 } 145 return tokens; 146 } 147}