diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:06:44 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:06:44 +0000 |
commit | ed5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch) | |
tree | 7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /swext/mediawiki/src/com/sun/star/wiki/Settings.java | |
parent | Initial commit. (diff) | |
download | libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.tar.xz libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.zip |
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'swext/mediawiki/src/com/sun/star/wiki/Settings.java')
-rw-r--r-- | swext/mediawiki/src/com/sun/star/wiki/Settings.java | 310 |
1 files changed, 310 insertions, 0 deletions
diff --git a/swext/mediawiki/src/com/sun/star/wiki/Settings.java b/swext/mediawiki/src/com/sun/star/wiki/Settings.java new file mode 100644 index 000000000..34e11e13e --- /dev/null +++ b/swext/mediawiki/src/com/sun/star/wiki/Settings.java @@ -0,0 +1,310 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +package com.sun.star.wiki; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.sun.star.beans.XPropertySet; +import com.sun.star.container.XNameAccess; +import com.sun.star.container.XNameContainer; +import com.sun.star.container.XNameReplace; +import com.sun.star.lang.XSingleServiceFactory; +import com.sun.star.uno.AnyConverter; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; +import com.sun.star.util.XChangesBatch; + +public class Settings +{ + + /* Singleton */ + private static Settings m_instance; + + + private final XComponentContext m_xContext; + private final List<Map<String, String>> m_WikiConnections = new ArrayList<Map<String, String>>(); + private final List<Map<String, Object>> m_aWikiDocs = new ArrayList<Map<String, Object>>(); + + private Settings( XComponentContext ctx ) + { + m_xContext=ctx; + loadConfiguration(); + } + + + public static synchronized Settings getSettings( XComponentContext ctx ) + { + if ( m_instance == null ) + m_instance = new Settings( ctx ); + return m_instance; + } + + + public void addWikiCon ( Map<String, String> wikiCon ) + { + m_WikiConnections.add( wikiCon ); + } + + + private String getWikiConUrlByNumber( int num ) + { + String url = ""; + if ( num >=0 && num < m_WikiConnections.size() ) + { + Map<String,String> ht = m_WikiConnections.get( num ); + url = ht.get( "Url" ); + } + return url; + } + + + public void addWikiDoc ( Map<String, Object> aWikiDoc ) + { + String sURL = ( String ) aWikiDoc.get( "CompleteUrl" ); + Map<String,Object> aEntry = getDocByCompleteUrl( sURL ); + + if ( aEntry != null ) + { + // add doc to the end, even if it has been added before + m_aWikiDocs.remove( aEntry ); + } + else if ( m_aWikiDocs.size() > 10 ) + { + // if the number of elements has reached maximum the oldest element should be removed + m_aWikiDocs.remove( 0 ); + } + + m_aWikiDocs.add( aWikiDoc ); + } + + + public Object[] getWikiDocList( int serverid ) + { + String wikiserverurl = getWikiConUrlByNumber( serverid ); + List<String> theDocs = new ArrayList<String>(); + String [] docs = new String[0]; + for ( int i=0; i<m_aWikiDocs.size(); i++ ) + { + Map<String,Object> ht = m_aWikiDocs.get( i ); + String docurl = ( String ) ht.get( "Url" ); + if ( docurl.equals( wikiserverurl ) ) + { + theDocs.add( (String ) ht.get( "Doc" ) ); + } + } + return theDocs.toArray( docs ); + } + + public String[] getWikiURLs() + { + String [] WikiList = new String [m_WikiConnections.size()]; + for ( int i=0; i<m_WikiConnections.size(); i++ ) + { + Map<String,String> ht = m_WikiConnections.get( i ); + WikiList[i] = ht.get( "Url" ); + } + return WikiList; + } + + + public Map<String, String> getSettingByUrl( String sUrl ) + { + Map<String, String> ht = null; + for( int i=0;i<m_WikiConnections.size();i++ ) + { + Map<String, String> h1 = m_WikiConnections.get( i ); + String u1 = h1.get( "Url" ); + if ( u1.equals( sUrl ) ) + { + ht = h1; + try + { + String sUserName = ht.get( "Username" ); + String aPassword = ht.get( "Password" ); + if ( sUserName != null && sUserName.length() > 0 && ( aPassword == null || aPassword.length() == 0 ) ) + { + String[] pPasswords = Helper.GetPasswordsForURLAndUser( m_xContext, sUrl, sUserName ); + if ( pPasswords != null && pPasswords.length > 0 ) + ht.put( "Password", pPasswords[0] ); + } + } + catch( Exception e ) + { + e.printStackTrace(); + } + + break; + } + } + return ht; + } + + private Map<String,Object> getDocByCompleteUrl( String curl ) + { + Map<String,Object> ht = null; + for( int i=0;i<m_aWikiDocs.size();i++ ) + { + Map<String,Object> h1 = m_aWikiDocs.get( i ); + String u1 = ( String ) h1.get( "CompleteUrl" ); + if ( u1.equals( curl ) ) + { + ht = h1; + } + } + return ht; + } + + + public void removeSettingByUrl( String sUrl ) + { + for( int i=0;i<m_WikiConnections.size();i++ ) + { + Map<String,String> h1 = m_WikiConnections.get( i ); + String u1 = h1.get( "Url" ); + if ( u1.equals( sUrl ) ) + { + m_WikiConnections.remove( i ); + } + } + } + + + public void storeConfiguration() + { + try + { + { + // remove stored connection information + XNameContainer xContainer = Helper.GetConfigNameContainer(m_xContext, "org.openoffice.Office.Custom.WikiExtension/ConnectionList"); + String[] pNames = xContainer.getElementNames(); + for (String pName : pNames) + { + xContainer.removeByName(pName); + } + // store all connections + XSingleServiceFactory xConnectionFactory = UnoRuntime.queryInterface(XSingleServiceFactory.class, xContainer); + for (Map<String, String> ht : m_WikiConnections) + { + Object oNewConnection = xConnectionFactory.createInstance(); + XNameReplace xNewConn = UnoRuntime.queryInterface(XNameReplace.class, oNewConnection); + if (xNewConn != null) + { + xNewConn.replaceByName("UserName", ht.get("Username")); + } + xContainer.insertByName(ht.get("Url"), xNewConn); + } + // commit changes + XChangesBatch xBatch = UnoRuntime.queryInterface(XChangesBatch.class, xContainer); + xBatch.commitChanges(); + } + + { + // remove stored connection information + XNameContainer xContainer = Helper.GetConfigNameContainer(m_xContext, "org.openoffice.Office.Custom.WikiExtension/RecentDocs"); + String[] pNames = xContainer.getElementNames(); + for (String pName : pNames) + { + xContainer.removeByName(pName); + } + // store all Docs + XSingleServiceFactory xDocListFactory = UnoRuntime.queryInterface(XSingleServiceFactory.class, xContainer); + int i = 0; + for (Map<String, Object> ht : m_aWikiDocs) + { + Object oNewDoc = xDocListFactory.createInstance(); + XNameReplace xNewDoc = UnoRuntime.queryInterface(XNameReplace.class, oNewDoc); + for (Map.Entry<String, Object> entry : ht.entrySet()) + { + xNewDoc.replaceByName(entry.getKey(), entry.getValue()); + } + xContainer.insertByName("d" + i++, xNewDoc); + } + // commit changes + XChangesBatch xBatch = UnoRuntime.queryInterface(XChangesBatch.class, xContainer); + xBatch.commitChanges(); + } + + } + catch ( Exception ex ) + { + ex.printStackTrace(); + } + } + + public void loadConfiguration() + { + m_WikiConnections.clear(); + try + { + // get configuration service + // connect to configmanager + XNameAccess xAccess = Helper.GetConfigNameAccess( m_xContext, "org.openoffice.Office.Custom.WikiExtension" ); + + if ( xAccess != null ) + { + Object oList = xAccess.getByName( "ConnectionList" ); + XNameAccess xConnectionList = UnoRuntime.queryInterface( XNameAccess.class, oList ); + String [] allCons = xConnectionList.getElementNames(); + for (String aConnection : allCons) + { + Map<String, String> ht = new HashMap<String, String>(); + ht.put("Url", aConnection); + ht.put( "Username", "" ); + ht.put( "Password", "" ); + try + { + XPropertySet xProps = UnoRuntime.queryInterface(XPropertySet.class, xConnectionList.getByName(aConnection)); + if ( xProps != null ) + { + String aUsername = AnyConverter.toString( xProps.getPropertyValue( "UserName" ) ); + if ( aUsername != null && aUsername.length() > 0 ) + ht.put( "Username", aUsername ); + } + } + catch( Exception e ) + { + e.printStackTrace(); + } + addWikiCon( ht ); + } + + Object oDocs = xAccess.getByName( "RecentDocs" ); + XNameAccess xRecentDocs = UnoRuntime.queryInterface( XNameAccess.class, oDocs ); + String [] allDocs = xRecentDocs.getElementNames(); + for (String aDocument : allDocs) + { + Object oDoc = xRecentDocs.getByName(aDocument); + XNameAccess xDoc = UnoRuntime.queryInterface( XNameAccess.class, oDoc ); + Map<String, Object> ht = new HashMap<String, Object>(); + ht.put( "Url", xDoc.getByName( "Url" ) ); + ht.put( "CompleteUrl", xDoc.getByName( "CompleteUrl" ) ); + ht.put( "Doc", xDoc.getByName( "Doc" ) ); + addWikiDoc( ht ); + } + } + } + catch ( Exception ex ) + { + ex.printStackTrace(); + } + } +} |