/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ package transex3.controller; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.lang.Runtime; import java.util.*; import javax.swing.ListSelectionModel; import javax.swing.WindowConstants; import javax.swing.event.*; import transex3.model.*; import java.io.*; import javax.swing.*; //import transex3.model.*; public class EditorController { public final String[] RESTYPES = { ".src",".hrc",".xcu",".xrm",".xhp" }; public final String RECFILE = ".recommand"; // Editor View static transex3.view.Editor aEditor = null; // Editor Model static Vector sdfstrings = new Vector(); static HashMap hashedsdfstrings = new HashMap(); int oldindex = 0; //HashMap hashedfilenames = new HashMap(); // Search for source Strings public String fetchSourceStrings( String rootdir ){ //String outputfile = "h:\\workspace\\recommandEditor\\null2"; File tempfile = null; try { tempfile = File.createTempFile( "receditor" , "tmp" ); } catch (IOException e1) { // TODO Auto-generated catch block System.err.println("Can not create temp file\n"); e1.printStackTrace(); } String outputfile = tempfile.getAbsolutePath(); try { //System.out.println("localize_sl -QQ -skip_links -e -l en-US -f "+outputfile+" -d "+rootdir); System.out.println("localize_sl -QQ -skip_links -e -l en-US -f "+outputfile ); java.lang.Process aProc = Runtime.getRuntime().exec("localize_sl -QQ -skip_links -e -l en-US -f "+outputfile); //java.lang.Process aProc = Runtime.getRuntime().exec("localize_sl -QQ -e -l en-US -f "+outputfile+" -d "+rootdir); BufferedReader aBR = new BufferedReader( new InputStreamReader( aProc.getInputStream() ) ); String line = aBR.readLine(); while( line != null && line.length() > 0 ){ //System.out.print( line ); line = aBR.readLine(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return outputfile; } // Search for recommand files public void findRecommandFiles( File rootdir , Vector list ){ System.out.print("."); System.out.flush(); File[] aFileArray = rootdir.listFiles(); if( aFileArray != null ){ for( int cnt = 0; aFileArray.length > cnt ; cnt++ ){ if( aFileArray[ cnt ].isDirectory() && !aFileArray[ cnt ].getAbsolutePath().endsWith(".lnk") ) findRecommandFiles( aFileArray[ cnt ] , list); else if( aFileArray[ cnt ].isFile() && isRecommandFile( aFileArray[ cnt ] ) ) list.add( aFileArray[ cnt ]); } } } private boolean isResourceType( File aFile ){ String filename = aFile.getName(); boolean isResType = false; for(int cnt = 0; cnt < RESTYPES.length ; cnt++){ if( filename.endsWith( RESTYPES[ cnt ] ) ) isResType = true; } return isResType; } private boolean isRecommandFile( File aFile ){ return aFile.getName().endsWith( RECFILE ); } public void clearAllRows( JTable aTable ){ for ( int n = 0; n < aTable.getRowCount() ; n++ ){ aTable.setValueAt( null , n , 0 ); aTable.setValueAt( null , n , 1 ); aTable.setValueAt( null , n , 2 ); aTable.setValueAt( null , n , 3 ); aTable.setValueAt( null , n , 4 ); } } // Add all data to view void updateData(){ JTable recTable =transex3.controller.EditorController.aEditor.getRectable(); SdfString aSdfString = (SdfString) sdfstrings.get( oldindex ); Vector newStrings = new Vector(); for ( int n = 1; n < recTable.getRowCount() ; n++ ){ String lang = (String) recTable.getValueAt(n , 0 ); String text = (String) recTable.getValueAt(n , 1 ); String htext = (String) recTable.getValueAt(n , 2 ); String qhtext = (String) recTable.getValueAt(n , 3 ); String ttext = (String) recTable.getValueAt(n , 4 ); if( lang != null && text != null ){ //System.out.println("Data "+ lang + " " + text ); SdfEntity aSdfEntity = new SdfEntity(); aSdfEntity.setLangid( lang ); aSdfEntity.setText( text ); aSdfEntity.setHelptext( htext ); aSdfEntity.setQuickhelptext( qhtext ); aSdfEntity.setTitle( ttext ); newStrings.add( aSdfEntity ); aSdfString.setLanguageStrings( newStrings ); } } } public void initView(){ Object[][] sourceStringData = new Object[ sdfstrings.size() ][ 4 ]; Object[][] firstData = new Object[100][5]; // Set the files Iterator aIter = sdfstrings.iterator(); int counter = 0; while( aIter.hasNext() ){ SdfString aSdfString = (SdfString) aIter.next(); sourceStringData[ counter ][ 0 ] = aSdfString.getSourceString().getProject()+"\\"+aSdfString.getSourceString().getSource_file(); sourceStringData[ counter ][ 1 ] = aSdfString.getSourceString().getGid(); sourceStringData[ counter ][ 2 ] = aSdfString.getSourceString().getLid(); sourceStringData[ counter ][ 3 ] = aSdfString.getSourceString().getText(); if( counter == 0 ){ firstData[ 0 ][ 0 ] = "en-US"; firstData[ 0 ][ 1 ] = aSdfString.getSourceString().getText(); firstData[ 0 ][ 2 ] = aSdfString.getSourceString().getHelptext(); firstData[ 0 ][ 3 ] = aSdfString.getSourceString().getQuickhelptext(); firstData[ 0 ][ 4 ] = aSdfString.getSourceString().getTitle(); aSdfString = (SdfString) sdfstrings.get( 0 ); Vector values = aSdfString.getLanguageStrings(); for( int n = 0; n < values.size() ; n++ ) { SdfEntity aEntity = (SdfEntity) values.get( n ); firstData[ n+1 ][ 0 ] = aEntity.getLangid(); firstData[ n+1 ][ 1 ] = aEntity.getText(); firstData[ n+1 ][ 2 ] = aEntity.getHelptext(); firstData[ n+1 ][ 3 ] = aEntity.getQuickhelptext(); firstData[ n+1 ][ 4 ] = aEntity.getTitle(); } } counter++; } // Set the source srtings //aEditor = new transex3.view.Editor( sourceStringData , filedata.toArray() ); aEditor = new transex3.view.Editor( sourceStringData , firstData ); aEditor.setBounds(100,100,800,900); aEditor.setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE ); aEditor.setVisible(true); aEditor.repaint(); aEditor.addWindowListener( new WindowAdapter(){ public void windowClosed(WindowEvent e ){ System.exit( 0 ); } }); aEditor.getMiExit().addActionListener( new ActionListener(){ public void actionPerformed( ActionEvent e ){ System.exit( 0 ); } }); aEditor.getMiSave().addActionListener( new ActionListener(){ public void actionPerformed( ActionEvent e ){ Iterator aIter = sdfstrings.iterator(); String lastFile=""; while( aIter.hasNext() ) { SdfString aSdfString = (SdfString )aIter.next(); if( aSdfString.getFileId().compareTo( lastFile ) != 0 ){ //aSdfString.removeFile(); } aSdfString.writeString(); lastFile = aSdfString.getFileId(); } } }); //aEditor.getRectable().putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); aEditor.getRectable().addFocusListener( new FocusListener(){ public void focusLost(FocusEvent e){ //super.focusLost( e ); //System.out.println("focus lost"); JTable aTable = aEditor.getRectable(); if( aTable.getSelectedRow() != -1 && aTable.getSelectedColumn() != -1 ) aTable.getCellEditor( aTable.getSelectedRow(), aTable.getSelectedColumn() ).stopCellEditing(); updateData(); } public void focusGained( FocusEvent e){ //super.focusGained( e ); //System.out.println("focus gained"); } }); //setDefaultEditor(Object.class, new transex3.view.FocusCellEditor(new JTextField())); aEditor.getRectable().getModel().addTableModelListener( new TableModelListener() { public void tableChanged( TableModelEvent e ){ //System.out.println( e ); }}); aEditor.getRectable().getSelectionModel().addListSelectionListener( new ListSelectionListener(){ public void valueChanged( ListSelectionEvent e ){ JTable aTable = aEditor.getRectable(); //if( aTable.getSelectedRow() != -1 && aTable.getSelectedColumn() != -1 ) //aTable.getCellEditor( aTable.getSelectedRow(), aTable.getSelectedColumn() ).stopCellEditing(); updateData(); } }); aEditor.getTable().setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); aEditor.getTable().getSelectionModel().addListSelectionListener( new ListSelectionListener(){ public void valueChanged( ListSelectionEvent e ){ //System.out.println("Selected = " +e.getFirstIndex()+"\n"); JTable table =transex3.controller.EditorController.aEditor.getTable(); JTable recTable =transex3.controller.EditorController.aEditor.getRectable(); SdfString aSdfString; JTable aTable = aEditor.getRectable(); if( aTable.getSelectedRow() != -1 && aTable.getSelectedColumn() != -1 ) aTable.getCellEditor( aTable.getSelectedRow(), aTable.getSelectedColumn() ).stopCellEditing(); updateData(); clearAllRows( recTable ); aSdfString = (SdfString) sdfstrings.get( table.getSelectedRow() ); recTable.setValueAt( "en-US" , 0, 0 ); recTable.setValueAt( aSdfString.getSourceString().getText() , 0, 1 ); recTable.setValueAt( aSdfString.getSourceString().getHelptext() , 0, 2 ); recTable.setValueAt( aSdfString.getSourceString().getQuickhelptext() , 0, 3 ); recTable.setValueAt( aSdfString.getSourceString().getTitle() , 0, 4 ); Vector values = aSdfString.getLanguageStrings(); for( int n = 0; n < values.size() ; n++ ) { SdfEntity aEntity = (SdfEntity) values.get( n ); recTable.setValueAt( aEntity.getLangid() , n+1 , 0 ); recTable.setValueAt( aEntity.getText() , n+1 , 1 ); recTable.setValueAt( aEntity.getHelptext() , n+1 , 2 ); recTable.setValueAt( aEntity.getQuickhelptext() , n+1 , 3 ); recTable.setValueAt( aEntity.getTitle() , n+1 , 4 ); } oldindex = table.getSelectedRow(); } }); //System.out.println("initView successfully"); } public void initInitialStrings(){ String rootdir = java.lang.System.getProperty("SOLARSRC"); String sourcestringsfile = null; Vector recList = new Vector(); sourcestringsfile = fetchSourceStrings( rootdir ); //findRecommandFiles( new File( rootdir ) , recList ); readStrings( sourcestringsfile , recList ); File sfile = new File ( sourcestringsfile ); sfile.delete(); initView(); aEditor.repaint(); } // Connect recommand strings with source strings public void readStrings( String sourcefiles , Vector recfiles ) { BufferedReader aBR = null; try { //System.out.println("DBG: sourcefiles = " +sourcefiles); aBR = new BufferedReader( new FileReader( sourcefiles ) ); String current = aBR.readLine(); SdfString aSdfString = null; SdfEntity aSdfEntity = null; while( current != null ){ aSdfEntity = new SdfEntity(); aSdfEntity.setProperties( current ); aSdfString = new SdfString(); aSdfString.addSourceString( aSdfEntity ); hashedsdfstrings.put( aSdfString.getId() , aSdfString ); //System.out.println("Put ID '"+aSdfString.getId()+"'"); sdfstrings.add( aSdfString ); current = aBR.readLine(); } Iterator aIter=recfiles.iterator(); File aFile; BufferedReader aBR2 = null; //System.out.println("Connecting strings"); while( aIter.hasNext() ){ aFile = (File) aIter.next(); aBR2 = new BufferedReader( new FileReader( aFile ) ) ; String current2 = aBR2.readLine(); while ( current2 != null ){ SdfEntity aEntity = new SdfEntity(); aEntity.setProperties( current2 ); if( hashedsdfstrings.containsKey( aEntity.getId() ) ) { aSdfString = (SdfString) hashedsdfstrings.get( aEntity.getId() ); aSdfString.addLanguageString( aEntity ); } else { System.out.println("DBG: Can't find source string '"+aEntity.getId()+"'" ); } current2 = aBR2.readLine(); } } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch ( IOException e){ e.printStackTrace(); } } }