1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 package transex3.controller; 23 24 import java.awt.event.ActionEvent; 25 import java.awt.event.ActionListener; 26 import java.awt.event.*; 27 import java.awt.event.WindowAdapter; 28 import java.awt.event.WindowEvent; 29 import java.io.BufferedReader; 30 import java.io.File; 31 import java.io.FileNotFoundException; 32 import java.io.IOException; 33 import java.io.InputStreamReader; 34 import java.lang.Runtime; 35 import java.util.*; 36 37 import javax.swing.ListSelectionModel; 38 import javax.swing.WindowConstants; 39 import javax.swing.event.*; 40 41 import transex3.model.*; 42 43 import java.io.*; 44 import javax.swing.*; 45 //import transex3.model.*; 46 public class EditorController { 47 public final String[] RESTYPES = { ".src",".hrc",".xcu",".xrm",".xhp" }; 48 public final String RECFILE = ".recommand"; 49 // Editor View 50 static transex3.view.Editor aEditor = null; 51 // Editor Model 52 static Vector sdfstrings = new Vector(); 53 static HashMap hashedsdfstrings = new HashMap(); 54 int oldindex = 0; 55 //HashMap hashedfilenames = new HashMap(); 56 // Search for source Strings fetchSourceStrings( String rootdir )57 public String fetchSourceStrings( String rootdir ){ 58 59 //String outputfile = "h:\\workspace\\recommandEditor\\null2"; 60 File tempfile = null; 61 62 try { 63 tempfile = File.createTempFile( "receditor" , "tmp" ); 64 } catch (IOException e1) { 65 // TODO Auto-generated catch block 66 System.err.println("Can not create temp file\n"); 67 e1.printStackTrace(); 68 } 69 70 String outputfile = tempfile.getAbsolutePath(); 71 try 72 { 73 //System.out.println("localize_sl -QQ -skip_links -e -l en-US -f "+outputfile+" -d "+rootdir); 74 System.out.println("localize_sl -QQ -skip_links -e -l en-US -f "+outputfile ); 75 java.lang.Process aProc = Runtime.getRuntime().exec("localize_sl -QQ -skip_links -e -l en-US -f "+outputfile); 76 77 //java.lang.Process aProc = Runtime.getRuntime().exec("localize_sl -QQ -e -l en-US -f "+outputfile+" -d "+rootdir); 78 BufferedReader aBR = new BufferedReader( new InputStreamReader( aProc.getInputStream() ) ); 79 String line = aBR.readLine(); 80 while( line != null && line.length() > 0 ){ 81 //System.out.print( line ); 82 line = aBR.readLine(); 83 } 84 85 } catch (IOException e) { 86 // TODO Auto-generated catch block 87 e.printStackTrace(); 88 } 89 return outputfile; 90 } 91 // Search for recommand files findRecommandFiles( File rootdir , Vector list )92 public void findRecommandFiles( File rootdir , Vector list ){ 93 System.out.print("."); 94 System.out.flush(); 95 File[] aFileArray = rootdir.listFiles(); 96 if( aFileArray != null ){ 97 for( int cnt = 0; aFileArray.length > cnt ; cnt++ ){ 98 if( aFileArray[ cnt ].isDirectory() && !aFileArray[ cnt ].getAbsolutePath().endsWith(".lnk") ) 99 findRecommandFiles( aFileArray[ cnt ] , list); 100 else if( aFileArray[ cnt ].isFile() && isRecommandFile( aFileArray[ cnt ] ) ) 101 list.add( aFileArray[ cnt ]); 102 } 103 } 104 } isResourceType( File aFile )105 private boolean isResourceType( File aFile ){ 106 String filename = aFile.getName(); 107 boolean isResType = false; 108 for(int cnt = 0; cnt < RESTYPES.length ; cnt++){ 109 if( filename.endsWith( RESTYPES[ cnt ] ) ) 110 isResType = true; 111 } 112 return isResType; 113 } isRecommandFile( File aFile )114 private boolean isRecommandFile( File aFile ){ 115 return aFile.getName().endsWith( RECFILE ); 116 } clearAllRows( JTable aTable )117 public void clearAllRows( JTable aTable ){ 118 for ( int n = 0; n < aTable.getRowCount() ; n++ ){ 119 aTable.setValueAt( null , n , 0 ); 120 aTable.setValueAt( null , n , 1 ); 121 aTable.setValueAt( null , n , 2 ); 122 aTable.setValueAt( null , n , 3 ); 123 aTable.setValueAt( null , n , 4 ); 124 } 125 } 126 // Add all data to view updateData()127 void updateData(){ 128 JTable recTable =transex3.controller.EditorController.aEditor.getRectable(); 129 130 SdfString aSdfString = (SdfString) sdfstrings.get( oldindex ); 131 Vector newStrings = new Vector(); 132 for ( int n = 1; n < recTable.getRowCount() ; n++ ){ 133 String lang = (String) recTable.getValueAt(n , 0 ); 134 String text = (String) recTable.getValueAt(n , 1 ); 135 String htext = (String) recTable.getValueAt(n , 2 ); 136 String qhtext = (String) recTable.getValueAt(n , 3 ); 137 String ttext = (String) recTable.getValueAt(n , 4 ); 138 if( lang != null && text != null ){ 139 //System.out.println("Data "+ lang + " " + text ); 140 SdfEntity aSdfEntity = new SdfEntity(); 141 aSdfEntity.setLangid( lang ); 142 aSdfEntity.setText( text ); 143 aSdfEntity.setHelptext( htext ); 144 aSdfEntity.setQuickhelptext( qhtext ); 145 aSdfEntity.setTitle( ttext ); 146 newStrings.add( aSdfEntity ); 147 aSdfString.setLanguageStrings( newStrings ); 148 } 149 } 150 } 151 initView()152 public void initView(){ 153 Object[][] sourceStringData = new Object[ sdfstrings.size() ][ 4 ]; 154 Object[][] firstData = new Object[100][5]; 155 // Set the files 156 Iterator aIter = sdfstrings.iterator(); 157 int counter = 0; 158 while( aIter.hasNext() ){ 159 SdfString aSdfString = (SdfString) aIter.next(); 160 sourceStringData[ counter ][ 0 ] = aSdfString.getSourceString().getProject()+"\\"+aSdfString.getSourceString().getSource_file(); 161 sourceStringData[ counter ][ 1 ] = aSdfString.getSourceString().getGid(); 162 sourceStringData[ counter ][ 2 ] = aSdfString.getSourceString().getLid(); 163 sourceStringData[ counter ][ 3 ] = aSdfString.getSourceString().getText(); 164 if( counter == 0 ){ 165 firstData[ 0 ][ 0 ] = "en-US"; 166 firstData[ 0 ][ 1 ] = aSdfString.getSourceString().getText(); 167 firstData[ 0 ][ 2 ] = aSdfString.getSourceString().getHelptext(); 168 firstData[ 0 ][ 3 ] = aSdfString.getSourceString().getQuickhelptext(); 169 firstData[ 0 ][ 4 ] = aSdfString.getSourceString().getTitle(); 170 aSdfString = (SdfString) sdfstrings.get( 0 ); 171 Vector values = aSdfString.getLanguageStrings(); 172 for( int n = 0; n < values.size() ; n++ ) 173 { 174 SdfEntity aEntity = (SdfEntity) values.get( n ); 175 firstData[ n+1 ][ 0 ] = aEntity.getLangid(); 176 firstData[ n+1 ][ 1 ] = aEntity.getText(); 177 firstData[ n+1 ][ 2 ] = aEntity.getHelptext(); 178 firstData[ n+1 ][ 3 ] = aEntity.getQuickhelptext(); 179 firstData[ n+1 ][ 4 ] = aEntity.getTitle(); 180 } 181 } 182 counter++; 183 } 184 // Set the source srtings 185 186 187 //aEditor = new transex3.view.Editor( sourceStringData , filedata.toArray() ); 188 aEditor = new transex3.view.Editor( sourceStringData , firstData ); 189 190 aEditor.setBounds(100,100,800,900); 191 aEditor.setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE ); 192 aEditor.setVisible(true); 193 aEditor.repaint(); 194 aEditor.addWindowListener( new WindowAdapter(){ 195 public void windowClosed(WindowEvent e ){ 196 System.exit( 0 ); 197 } 198 }); 199 200 aEditor.getMiExit().addActionListener( new ActionListener(){ 201 public void actionPerformed( ActionEvent e ){ 202 System.exit( 0 ); 203 } 204 }); 205 206 aEditor.getMiSave().addActionListener( new ActionListener(){ 207 public void actionPerformed( ActionEvent e ){ 208 Iterator aIter = sdfstrings.iterator(); 209 String lastFile=""; 210 while( aIter.hasNext() ) 211 { 212 SdfString aSdfString = (SdfString )aIter.next(); 213 if( aSdfString.getFileId().compareTo( lastFile ) != 0 ){ 214 //aSdfString.removeFile(); 215 } 216 aSdfString.writeString(); 217 lastFile = aSdfString.getFileId(); 218 } 219 } 220 }); 221 222 //aEditor.getRectable().putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); 223 aEditor.getRectable().addFocusListener( new FocusListener(){ 224 public void focusLost(FocusEvent e){ 225 //super.focusLost( e ); 226 //System.out.println("focus lost"); 227 JTable aTable = aEditor.getRectable(); 228 if( aTable.getSelectedRow() != -1 && aTable.getSelectedColumn() != -1 ) 229 aTable.getCellEditor( aTable.getSelectedRow(), aTable.getSelectedColumn() ).stopCellEditing(); 230 updateData(); 231 } 232 public void focusGained( FocusEvent e){ 233 //super.focusGained( e ); 234 //System.out.println("focus gained"); 235 } 236 }); 237 //setDefaultEditor(Object.class, new transex3.view.FocusCellEditor(new JTextField())); 238 239 aEditor.getRectable().getModel().addTableModelListener( new TableModelListener() { 240 public void tableChanged( TableModelEvent e ){ 241 //System.out.println( e ); 242 }}); 243 244 245 aEditor.getRectable().getSelectionModel().addListSelectionListener( new ListSelectionListener(){ 246 public void valueChanged( ListSelectionEvent e ){ 247 JTable aTable = aEditor.getRectable(); 248 //if( aTable.getSelectedRow() != -1 && aTable.getSelectedColumn() != -1 ) 249 //aTable.getCellEditor( aTable.getSelectedRow(), aTable.getSelectedColumn() ).stopCellEditing(); 250 251 updateData(); 252 } 253 }); 254 255 aEditor.getTable().setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); 256 aEditor.getTable().getSelectionModel().addListSelectionListener( new ListSelectionListener(){ 257 public void valueChanged( ListSelectionEvent e ){ 258 //System.out.println("Selected = " +e.getFirstIndex()+"\n"); 259 JTable table =transex3.controller.EditorController.aEditor.getTable(); 260 JTable recTable =transex3.controller.EditorController.aEditor.getRectable(); 261 SdfString aSdfString; 262 JTable aTable = aEditor.getRectable(); 263 if( aTable.getSelectedRow() != -1 && aTable.getSelectedColumn() != -1 ) 264 aTable.getCellEditor( aTable.getSelectedRow(), aTable.getSelectedColumn() ).stopCellEditing(); 265 266 updateData(); 267 clearAllRows( recTable ); 268 269 aSdfString = (SdfString) sdfstrings.get( table.getSelectedRow() ); 270 recTable.setValueAt( "en-US" , 0, 0 ); 271 recTable.setValueAt( aSdfString.getSourceString().getText() , 0, 1 ); 272 recTable.setValueAt( aSdfString.getSourceString().getHelptext() , 0, 2 ); 273 recTable.setValueAt( aSdfString.getSourceString().getQuickhelptext() , 0, 3 ); 274 recTable.setValueAt( aSdfString.getSourceString().getTitle() , 0, 4 ); 275 Vector values = aSdfString.getLanguageStrings(); 276 for( int n = 0; n < values.size() ; n++ ) 277 { 278 SdfEntity aEntity = (SdfEntity) values.get( n ); 279 recTable.setValueAt( aEntity.getLangid() , n+1 , 0 ); 280 recTable.setValueAt( aEntity.getText() , n+1 , 1 ); 281 recTable.setValueAt( aEntity.getHelptext() , n+1 , 2 ); 282 recTable.setValueAt( aEntity.getQuickhelptext() , n+1 , 3 ); 283 recTable.setValueAt( aEntity.getTitle() , n+1 , 4 ); 284 } 285 oldindex = table.getSelectedRow(); 286 } 287 }); 288 //System.out.println("initView successfully"); 289 } initInitialStrings()290 public void initInitialStrings(){ 291 String rootdir = java.lang.System.getProperty("SOLARSRC"); 292 String sourcestringsfile = null; 293 Vector recList = new Vector(); 294 sourcestringsfile = fetchSourceStrings( rootdir ); 295 //findRecommandFiles( new File( rootdir ) , recList ); 296 readStrings( sourcestringsfile , recList ); 297 File sfile = new File ( sourcestringsfile ); 298 sfile.delete(); 299 initView(); 300 aEditor.repaint(); 301 } 302 // Connect recommand strings with source strings readStrings( String sourcefiles , Vector recfiles )303 public void readStrings( String sourcefiles , Vector recfiles ) { 304 BufferedReader aBR = null; 305 try { 306 //System.out.println("DBG: sourcefiles = " +sourcefiles); 307 aBR = new BufferedReader( new FileReader( sourcefiles ) ); 308 String current = aBR.readLine(); 309 SdfString aSdfString = null; 310 SdfEntity aSdfEntity = null; 311 while( current != null ){ 312 aSdfEntity = new SdfEntity(); 313 aSdfEntity.setProperties( current ); 314 aSdfString = new SdfString(); 315 aSdfString.addSourceString( aSdfEntity ); 316 hashedsdfstrings.put( aSdfString.getId() , aSdfString ); 317 //System.out.println("Put ID '"+aSdfString.getId()+"'"); 318 sdfstrings.add( aSdfString ); 319 current = aBR.readLine(); 320 321 } 322 Iterator aIter=recfiles.iterator(); 323 File aFile; 324 BufferedReader aBR2 = null; 325 //System.out.println("Connecting strings"); 326 while( aIter.hasNext() ){ 327 aFile = (File) aIter.next(); 328 aBR2 = new BufferedReader( new FileReader( aFile ) ) ; 329 String current2 = aBR2.readLine(); 330 331 while ( current2 != null ){ 332 SdfEntity aEntity = new SdfEntity(); 333 aEntity.setProperties( current2 ); 334 335 if( hashedsdfstrings.containsKey( aEntity.getId() ) ) 336 { 337 aSdfString = (SdfString) hashedsdfstrings.get( aEntity.getId() ); 338 aSdfString.addLanguageString( aEntity ); 339 } 340 else 341 { 342 System.out.println("DBG: Can't find source string '"+aEntity.getId()+"'" ); 343 } 344 current2 = aBR2.readLine(); 345 } 346 } 347 } catch (FileNotFoundException e) { 348 // TODO Auto-generated catch block 349 e.printStackTrace(); 350 } catch ( IOException e){ 351 e.printStackTrace(); 352 } 353 354 } 355 } 356