1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski package com.sun.star.wiki; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import com.sun.star.awt.XContainerWindowEventHandler; 27*b1cdbd2cSJim Jagielski import com.sun.star.awt.XControl; 28*b1cdbd2cSJim Jagielski import com.sun.star.awt.XControlContainer; 29*b1cdbd2cSJim Jagielski import com.sun.star.awt.XDialog; 30*b1cdbd2cSJim Jagielski import com.sun.star.awt.XDialogEventHandler; 31*b1cdbd2cSJim Jagielski import com.sun.star.awt.XWindow; 32*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 33*b1cdbd2cSJim Jagielski import com.sun.star.lang.WrappedTargetException; 34*b1cdbd2cSJim Jagielski import com.sun.star.lang.XServiceInfo; 35*b1cdbd2cSJim Jagielski import com.sun.star.lib.uno.helper.WeakBase; 36*b1cdbd2cSJim Jagielski import com.sun.star.uno.AnyConverter; 37*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 38*b1cdbd2cSJim Jagielski import com.sun.star.uno.XComponentContext; 39*b1cdbd2cSJim Jagielski import java.util.Hashtable; 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski public final class WikiOptionsEventHandlerImpl extends WeakBase 42*b1cdbd2cSJim Jagielski implements XServiceInfo, XContainerWindowEventHandler, XDialogEventHandler 43*b1cdbd2cSJim Jagielski { 44*b1cdbd2cSJim Jagielski static final String[] m_pServiceNames = { "com.sun.star.wiki.WikiOptionsEventHandler" }; 45*b1cdbd2cSJim Jagielski static final String m_sImplementationName = WikiOptionsEventHandlerImpl.class.getName(); 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski static final String sExternalEvent = "external_event"; 48*b1cdbd2cSJim Jagielski static final String sAdd = "Add"; 49*b1cdbd2cSJim Jagielski static final String sEdit = "Edit"; 50*b1cdbd2cSJim Jagielski static final String sRemove = "Remove"; 51*b1cdbd2cSJim Jagielski static final String sListStatus = "ListStatus"; 52*b1cdbd2cSJim Jagielski static final String sListEdit = "ListEdit"; 53*b1cdbd2cSJim Jagielski static final String sInitialize = "initialize"; 54*b1cdbd2cSJim Jagielski static final String sOk = "ok"; 55*b1cdbd2cSJim Jagielski static final String sBack = "back"; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski private XComponentContext m_xContext; 58*b1cdbd2cSJim Jagielski private XDialog m_xDialog; 59*b1cdbd2cSJim Jagielski private XControlContainer m_xControlContainer; 60*b1cdbd2cSJim Jagielski 61*b1cdbd2cSJim Jagielski Settings m_aSettings; 62*b1cdbd2cSJim Jagielski WikiOptionsEventHandlerImpl( XComponentContext xContext )63*b1cdbd2cSJim Jagielski public WikiOptionsEventHandlerImpl( XComponentContext xContext ) 64*b1cdbd2cSJim Jagielski { 65*b1cdbd2cSJim Jagielski m_xContext = xContext; 66*b1cdbd2cSJim Jagielski } 67*b1cdbd2cSJim Jagielski GetPropSet( String sControl )68*b1cdbd2cSJim Jagielski protected XPropertySet GetPropSet( String sControl ) 69*b1cdbd2cSJim Jagielski { 70*b1cdbd2cSJim Jagielski if ( m_xControlContainer != null ) 71*b1cdbd2cSJim Jagielski { 72*b1cdbd2cSJim Jagielski XControl xControl = m_xControlContainer.getControl(sControl); 73*b1cdbd2cSJim Jagielski XPropertySet xListProps = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xControl.getModel() ); 74*b1cdbd2cSJim Jagielski return xListProps; 75*b1cdbd2cSJim Jagielski } 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski return null; 78*b1cdbd2cSJim Jagielski } 79*b1cdbd2cSJim Jagielski RefreshView()80*b1cdbd2cSJim Jagielski private void RefreshView() 81*b1cdbd2cSJim Jagielski { 82*b1cdbd2cSJim Jagielski if ( m_aSettings != null ) 83*b1cdbd2cSJim Jagielski { 84*b1cdbd2cSJim Jagielski String[] pWikiList = m_aSettings.getWikiURLs(); 85*b1cdbd2cSJim Jagielski XPropertySet xListProps = GetPropSet( "WikiList" ); 86*b1cdbd2cSJim Jagielski if ( xListProps != null ) 87*b1cdbd2cSJim Jagielski { 88*b1cdbd2cSJim Jagielski try 89*b1cdbd2cSJim Jagielski { 90*b1cdbd2cSJim Jagielski xListProps.setPropertyValue( "StringItemList", pWikiList ); 91*b1cdbd2cSJim Jagielski } 92*b1cdbd2cSJim Jagielski catch ( Exception ex ) 93*b1cdbd2cSJim Jagielski { 94*b1cdbd2cSJim Jagielski ex.printStackTrace(); 95*b1cdbd2cSJim Jagielski } 96*b1cdbd2cSJim Jagielski } 97*b1cdbd2cSJim Jagielski } 98*b1cdbd2cSJim Jagielski } 99*b1cdbd2cSJim Jagielski CheckButtonState()100*b1cdbd2cSJim Jagielski private void CheckButtonState() 101*b1cdbd2cSJim Jagielski { 102*b1cdbd2cSJim Jagielski XPropertySet xListProps = GetPropSet( "WikiList" ); 103*b1cdbd2cSJim Jagielski if ( xListProps != null ) 104*b1cdbd2cSJim Jagielski { 105*b1cdbd2cSJim Jagielski try 106*b1cdbd2cSJim Jagielski { 107*b1cdbd2cSJim Jagielski short [] pSel = (short []) xListProps.getPropertyValue( "SelectedItems" ); 108*b1cdbd2cSJim Jagielski XPropertySet xEditProps = GetPropSet( "EditButton" ); 109*b1cdbd2cSJim Jagielski XPropertySet xRemoveProps = GetPropSet( "RemoveButton" ); 110*b1cdbd2cSJim Jagielski Boolean bState = new Boolean( pSel.length != 0 ); 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski xEditProps.setPropertyValue( "Enabled", bState ); 113*b1cdbd2cSJim Jagielski xRemoveProps.setPropertyValue( "Enabled", bState ); 114*b1cdbd2cSJim Jagielski } 115*b1cdbd2cSJim Jagielski catch ( Exception ex ) 116*b1cdbd2cSJim Jagielski { 117*b1cdbd2cSJim Jagielski ex.printStackTrace(); 118*b1cdbd2cSJim Jagielski } 119*b1cdbd2cSJim Jagielski } 120*b1cdbd2cSJim Jagielski } 121*b1cdbd2cSJim Jagielski AddSetting()122*b1cdbd2cSJim Jagielski private void AddSetting() 123*b1cdbd2cSJim Jagielski { 124*b1cdbd2cSJim Jagielski WikiEditSettingDialog aSettingDialog = new WikiEditSettingDialog( m_xContext, "vnd.sun.star.script:WikiEditor.EditSetting?location=application" ); 125*b1cdbd2cSJim Jagielski if ( aSettingDialog.show() ) 126*b1cdbd2cSJim Jagielski RefreshView(); 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski aSettingDialog.DisposeDialog(); 129*b1cdbd2cSJim Jagielski } 130*b1cdbd2cSJim Jagielski EditSetting()131*b1cdbd2cSJim Jagielski private void EditSetting() 132*b1cdbd2cSJim Jagielski { 133*b1cdbd2cSJim Jagielski XPropertySet xListProps = GetPropSet( "WikiList" ); 134*b1cdbd2cSJim Jagielski if ( xListProps != null ) 135*b1cdbd2cSJim Jagielski { 136*b1cdbd2cSJim Jagielski Hashtable ht = null; 137*b1cdbd2cSJim Jagielski try 138*b1cdbd2cSJim Jagielski { 139*b1cdbd2cSJim Jagielski short[] pSel = (short []) xListProps.getPropertyValue( "SelectedItems" ); 140*b1cdbd2cSJim Jagielski String[] pItems = (String []) xListProps.getPropertyValue("StringItemList"); 141*b1cdbd2cSJim Jagielski if ( pSel.length > 0 && pItems.length > pSel[0] ) 142*b1cdbd2cSJim Jagielski { 143*b1cdbd2cSJim Jagielski String selName = pItems[pSel[0]]; 144*b1cdbd2cSJim Jagielski ht = m_aSettings.getSettingByUrl( pItems[pSel[0]] ); 145*b1cdbd2cSJim Jagielski } 146*b1cdbd2cSJim Jagielski } 147*b1cdbd2cSJim Jagielski catch ( Exception ex ) 148*b1cdbd2cSJim Jagielski { 149*b1cdbd2cSJim Jagielski ex.printStackTrace(); 150*b1cdbd2cSJim Jagielski } 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski WikiEditSettingDialog aSettingDialog = new WikiEditSettingDialog(m_xContext, "vnd.sun.star.script:WikiEditor.EditSetting?location=application", ht, true ); 153*b1cdbd2cSJim Jagielski if ( aSettingDialog.show() ) 154*b1cdbd2cSJim Jagielski RefreshView(); 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski aSettingDialog.DisposeDialog(); 157*b1cdbd2cSJim Jagielski } 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski RemoveSetting()160*b1cdbd2cSJim Jagielski private void RemoveSetting() 161*b1cdbd2cSJim Jagielski { 162*b1cdbd2cSJim Jagielski XPropertySet xListProps = GetPropSet("WikiList"); 163*b1cdbd2cSJim Jagielski if ( xListProps != null ) 164*b1cdbd2cSJim Jagielski { 165*b1cdbd2cSJim Jagielski try 166*b1cdbd2cSJim Jagielski { 167*b1cdbd2cSJim Jagielski short[] pSel = (short []) xListProps.getPropertyValue("SelectedItems"); 168*b1cdbd2cSJim Jagielski String[] pItems = (String []) GetPropSet("WikiList").getPropertyValue("StringItemList"); 169*b1cdbd2cSJim Jagielski if ( pSel.length > 0 && pItems.length > pSel[0] ) 170*b1cdbd2cSJim Jagielski { 171*b1cdbd2cSJim Jagielski m_aSettings.removeSettingByUrl( pItems[pSel[0]] ); 172*b1cdbd2cSJim Jagielski RefreshView(); 173*b1cdbd2cSJim Jagielski } 174*b1cdbd2cSJim Jagielski } 175*b1cdbd2cSJim Jagielski catch (Exception ex) 176*b1cdbd2cSJim Jagielski { 177*b1cdbd2cSJim Jagielski ex.printStackTrace(); 178*b1cdbd2cSJim Jagielski } 179*b1cdbd2cSJim Jagielski } 180*b1cdbd2cSJim Jagielski } 181*b1cdbd2cSJim Jagielski InitStrings()182*b1cdbd2cSJim Jagielski private void InitStrings() 183*b1cdbd2cSJim Jagielski { 184*b1cdbd2cSJim Jagielski try 185*b1cdbd2cSJim Jagielski { 186*b1cdbd2cSJim Jagielski 187*b1cdbd2cSJim Jagielski GetPropSet( "FixedLine1" ).setPropertyValue( "Label", Helper.GetLocalizedString( m_xContext, Helper.DLG_MEDIAWIKIEXTENSION_STRING ) ); 188*b1cdbd2cSJim Jagielski GetPropSet( "AddButton" ).setPropertyValue( "Label", Helper.GetLocalizedString( m_xContext, Helper.DLG_ADDBUTTON ) ); 189*b1cdbd2cSJim Jagielski GetPropSet( "EditButton" ).setPropertyValue( "Label", Helper.GetLocalizedString( m_xContext, Helper.DLG_EDITBUTTON ) ); 190*b1cdbd2cSJim Jagielski GetPropSet( "RemoveButton" ).setPropertyValue( "Label", Helper.GetLocalizedString( m_xContext, Helper.DLG_REMOVEBUTTON ) ); 191*b1cdbd2cSJim Jagielski } 192*b1cdbd2cSJim Jagielski catch( Exception e ) 193*b1cdbd2cSJim Jagielski { 194*b1cdbd2cSJim Jagielski e.printStackTrace(); 195*b1cdbd2cSJim Jagielski } 196*b1cdbd2cSJim Jagielski } 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielski // com.sun.star.lang.XServiceInfo: getImplementationName()199*b1cdbd2cSJim Jagielski public String getImplementationName() 200*b1cdbd2cSJim Jagielski { 201*b1cdbd2cSJim Jagielski return m_sImplementationName; 202*b1cdbd2cSJim Jagielski } 203*b1cdbd2cSJim Jagielski supportsService( String sService )204*b1cdbd2cSJim Jagielski public boolean supportsService( String sService ) 205*b1cdbd2cSJim Jagielski { 206*b1cdbd2cSJim Jagielski int len = m_pServiceNames.length; 207*b1cdbd2cSJim Jagielski 208*b1cdbd2cSJim Jagielski for( int i=0; i < len; i++ ) 209*b1cdbd2cSJim Jagielski { 210*b1cdbd2cSJim Jagielski if ( sService.equals( m_pServiceNames[i] )) 211*b1cdbd2cSJim Jagielski return true; 212*b1cdbd2cSJim Jagielski } 213*b1cdbd2cSJim Jagielski return false; 214*b1cdbd2cSJim Jagielski } 215*b1cdbd2cSJim Jagielski getSupportedServiceNames()216*b1cdbd2cSJim Jagielski public String[] getSupportedServiceNames() 217*b1cdbd2cSJim Jagielski { 218*b1cdbd2cSJim Jagielski return m_pServiceNames; 219*b1cdbd2cSJim Jagielski } 220*b1cdbd2cSJim Jagielski 221*b1cdbd2cSJim Jagielski // XContainerWindowEventHandler callHandlerMethod( XWindow xWindow, Object aEventObject, String sMethod )222*b1cdbd2cSJim Jagielski public boolean callHandlerMethod( XWindow xWindow, Object aEventObject, String sMethod ) 223*b1cdbd2cSJim Jagielski throws WrappedTargetException, com.sun.star.uno.RuntimeException 224*b1cdbd2cSJim Jagielski { 225*b1cdbd2cSJim Jagielski if ( sMethod.equals( sExternalEvent ) ) 226*b1cdbd2cSJim Jagielski { 227*b1cdbd2cSJim Jagielski try 228*b1cdbd2cSJim Jagielski { 229*b1cdbd2cSJim Jagielski String sEvent = (String)AnyConverter.toString( aEventObject ); 230*b1cdbd2cSJim Jagielski if ( sEvent != null ) 231*b1cdbd2cSJim Jagielski { 232*b1cdbd2cSJim Jagielski if ( sEvent.equals( sOk ) ) 233*b1cdbd2cSJim Jagielski { 234*b1cdbd2cSJim Jagielski if ( m_aSettings != null ) 235*b1cdbd2cSJim Jagielski m_aSettings.storeConfiguration(); 236*b1cdbd2cSJim Jagielski } 237*b1cdbd2cSJim Jagielski else if ( sEvent.equals( sInitialize ) || sEvent.equals( sBack ) ) 238*b1cdbd2cSJim Jagielski { 239*b1cdbd2cSJim Jagielski if ( sEvent.equals( sInitialize ) ) 240*b1cdbd2cSJim Jagielski { 241*b1cdbd2cSJim Jagielski m_xDialog = (XDialog)UnoRuntime.queryInterface( XDialog.class, xWindow ); 242*b1cdbd2cSJim Jagielski m_xControlContainer = (XControlContainer)UnoRuntime.queryInterface( 243*b1cdbd2cSJim Jagielski XControlContainer.class, m_xDialog ); 244*b1cdbd2cSJim Jagielski m_aSettings = Settings.getSettings( m_xContext ); 245*b1cdbd2cSJim Jagielski m_aSettings.loadConfiguration(); // throw away all the noncommited changes 246*b1cdbd2cSJim Jagielski InitStrings(); 247*b1cdbd2cSJim Jagielski } 248*b1cdbd2cSJim Jagielski else if ( m_aSettings != null ) 249*b1cdbd2cSJim Jagielski m_aSettings.loadConfiguration(); // throw away all the noncommited changes 250*b1cdbd2cSJim Jagielski 251*b1cdbd2cSJim Jagielski RefreshView(); 252*b1cdbd2cSJim Jagielski CheckButtonState(); 253*b1cdbd2cSJim Jagielski } 254*b1cdbd2cSJim Jagielski } 255*b1cdbd2cSJim Jagielski } 256*b1cdbd2cSJim Jagielski catch ( com.sun.star.uno.RuntimeException r ) 257*b1cdbd2cSJim Jagielski { 258*b1cdbd2cSJim Jagielski throw r; 259*b1cdbd2cSJim Jagielski } 260*b1cdbd2cSJim Jagielski catch ( com.sun.star.uno.Exception e ) 261*b1cdbd2cSJim Jagielski { 262*b1cdbd2cSJim Jagielski throw new WrappedTargetException( sMethod, this, e ); 263*b1cdbd2cSJim Jagielski } 264*b1cdbd2cSJim Jagielski } 265*b1cdbd2cSJim Jagielski else if ( sMethod.equals( sAdd ) ) 266*b1cdbd2cSJim Jagielski { 267*b1cdbd2cSJim Jagielski AddSetting(); 268*b1cdbd2cSJim Jagielski } 269*b1cdbd2cSJim Jagielski else if ( sMethod.equals( sEdit ) || sMethod.equals( sListEdit ) ) 270*b1cdbd2cSJim Jagielski { 271*b1cdbd2cSJim Jagielski EditSetting(); 272*b1cdbd2cSJim Jagielski } 273*b1cdbd2cSJim Jagielski else if ( sMethod.equals( sRemove ) ) 274*b1cdbd2cSJim Jagielski { 275*b1cdbd2cSJim Jagielski RemoveSetting(); 276*b1cdbd2cSJim Jagielski CheckButtonState(); 277*b1cdbd2cSJim Jagielski } 278*b1cdbd2cSJim Jagielski else if ( sMethod.equals( sListStatus ) ) 279*b1cdbd2cSJim Jagielski { 280*b1cdbd2cSJim Jagielski CheckButtonState(); 281*b1cdbd2cSJim Jagielski } 282*b1cdbd2cSJim Jagielski 283*b1cdbd2cSJim Jagielski return true; 284*b1cdbd2cSJim Jagielski } 285*b1cdbd2cSJim Jagielski callHandlerMethod( XDialog xDialog, Object aEventObject, String sMethod )286*b1cdbd2cSJim Jagielski public boolean callHandlerMethod( XDialog xDialog, Object aEventObject, String sMethod ) 287*b1cdbd2cSJim Jagielski throws WrappedTargetException, com.sun.star.uno.RuntimeException 288*b1cdbd2cSJim Jagielski { 289*b1cdbd2cSJim Jagielski 290*b1cdbd2cSJim Jagielski 291*b1cdbd2cSJim Jagielski return true; 292*b1cdbd2cSJim Jagielski } 293*b1cdbd2cSJim Jagielski getSupportedMethodNames()294*b1cdbd2cSJim Jagielski public String[] getSupportedMethodNames() 295*b1cdbd2cSJim Jagielski { 296*b1cdbd2cSJim Jagielski return new String[] { sExternalEvent, sAdd, sEdit, sRemove }; 297*b1cdbd2cSJim Jagielski } 298*b1cdbd2cSJim Jagielski }; 299*b1cdbd2cSJim Jagielski 300