All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.cogroo.addon.Main Maven / Gradle / Ivy

There is a newer version: 4.3.1
Show newest version
/**
 * Copyright (C) 2012 cogroo 
 *
 * Licensed 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 org.cogroo.addon;

import java.util.ArrayList;
import java.util.List;

import org.cogroo.addon.addon.contextmenu.ContextMenuInterceptor;
import org.cogroo.addon.dialogs.about.AboutThread;
import org.cogroo.addon.dialogs.reporterror.ErrorReportDialogThread;
import org.cogroo.addon.util.SelectedTextExtractor;
import org.cogroo.entities.Mistake;


import com.sun.star.beans.NamedValue;
import com.sun.star.beans.PropertyValue;
import com.sun.star.frame.XController;
import com.sun.star.frame.XModel;
import com.sun.star.lang.IllegalArgumentException;
import com.sun.star.lang.Locale;
import com.sun.star.lang.XSingleComponentFactory;
import com.sun.star.lib.uno.helper.Factory;
import com.sun.star.lib.uno.helper.WeakBase;
import com.sun.star.linguistic2.ProofreadingResult;
import com.sun.star.linguistic2.SingleProofreadingError;
import com.sun.star.linguistic2.XLinguServiceEventListener;
import com.sun.star.registry.XRegistryKey;
import com.sun.star.text.TextMarkupType;
import com.sun.star.text.XTextDocument;
import com.sun.star.ui.XContextMenuInterception;
import com.sun.star.ui.XContextMenuInterceptor;
import com.sun.star.uno.AnyConverter;
import com.sun.star.uno.Type;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;


public final class Main extends WeakBase
   implements com.sun.star.linguistic2.XProofreader,
              com.sun.star.lang.XServiceInfo,
              com.sun.star.linguistic2.XLinguServiceEventBroadcaster,
              com.sun.star.task.XJobExecutor,
              com.sun.star.lang.XServiceDisplayName,
              com.sun.star.lang.XInitialization,
              com.sun.star.frame.XDispatch,
              com.sun.star.frame.XDispatchProvider,
              com.sun.star.task.XJob
{

    private XComponentContext m_xContext;

    private com.sun.star.frame.XFrame m_xFrame;
    private static final String m_implementationName = Main.class.getName();

    private static final String[] m_serviceNames = {
        "com.sun.star.linguistic2.Proofreader",
	"org.cogroo.addon.Main",
        "com.sun.star.frame.ProtocolHandler",
        "org.cogroo.addon.Job"};

    /* related to XLinguServiceEventBroadcaster */
	private List xEventListeners = new ArrayList();

    public Main( XComponentContext context )
    {
        changeContext(context);

        // registry menu
        

    }

    public void changeContext(XComponentContext xCompContext) {
        this.m_xContext = xCompContext;
        Resources.changeContext(xCompContext);
    }

    public static XSingleComponentFactory __getComponentFactory( String sImplementationName ) {
        XSingleComponentFactory xFactory = null;

        if ( sImplementationName.equals( m_implementationName ) )
            xFactory = new SingletonFactory();
        return xFactory;
    }

    public static boolean __writeRegistryServiceInfo( XRegistryKey xRegistryKey ) {
        return Factory.writeRegistryServiceInfo(m_implementationName,
                                                m_serviceNames,
                                                xRegistryKey);
    }

    // com.sun.star.linguistic2.XSupportedLocales:
    public com.sun.star.lang.Locale[] getLocales()
    {
        return new Locale[] { new Locale("pt", "BR", "") };
    }

    public boolean hasLocale(com.sun.star.lang.Locale aLocale)
    {
        return GCUtil.isKnownLocale(getLocales(), aLocale);
    }

    // com.sun.star.linguistic2.XProofreader:
    public boolean isSpellChecker()
    {
        return false;
    }

    public com.sun.star.linguistic2.ProofreadingResult doProofreading(final String docID,
			final String paraText, final Locale locale,
			final int startOfSentencePos, final int sugEndOfSentencePos,
			final PropertyValue[] aLanguagePortions) throws com.sun.star.lang.IllegalArgumentException
    {

		final ProofreadingResult result = new ProofreadingResult();
		result.nBehindEndOfSentencePosition = sugEndOfSentencePos
				- startOfSentencePos;
		result.xProofreader = this;
		result.aLocale = locale;
		result.aDocumentIdentifier = docID;
		result.aText = paraText;

		if (startOfSentencePos == sugEndOfSentencePos || paraText == null
				|| paraText.trim().length() == 0) {
			return result;
		}

		//result.nBehindEndOfSentencePosition = paraText.length();

		// call CoGrOO
//		try {
 			List mistakeList = new ArrayList();
                        int end = CogrooSingleton.getInstance(this.m_xContext).checkSentence(paraText.substring(startOfSentencePos), mistakeList);
                        if(end > 0) {
                           result.nBehindEndOfSentencePosition = startOfSentencePos + end;
                        }

			List errorList = new ArrayList();

			for (Mistake mistake : mistakeList) {
				final SingleProofreadingError e1 = new SingleProofreadingError();

				e1.nErrorType = TextMarkupType.PROOFREADING;
				e1.aFullComment = mistake.getFullMessage();
				e1.aShortComment = mistake.getShortMessage();
				e1.aSuggestions = mistake.getSuggestions().clone();
				e1.nErrorStart = mistake.getStart() + startOfSentencePos;
				e1.nErrorLength = mistake.getEnd() - mistake.getStart();
				e1.aRuleIdentifier = mistake.getRuleIdentifier();

				errorList.add(e1);
			}

			result.aErrors = errorList
					.toArray(new SingleProofreadingError[errorList.size()]);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}

		return result;
    }

    public void ignoreRule(String aRuleIdentifier, com.sun.star.lang.Locale aLocale) throws com.sun.star.lang.IllegalArgumentException
    {
        CogrooSingleton.getInstance(this.m_xContext).ignoreRule(aRuleIdentifier);
    }

    public void resetIgnoreRules()
    {
        CogrooSingleton.getInstance(this.m_xContext).resetIgnoredRules();
    }

    // com.sun.star.lang.XServiceInfo:
    public String getImplementationName() {
         return m_implementationName;
    }

    public boolean supportsService( String sService ) {
        int len = m_serviceNames.length;

        for( int i=0; i < len; i++) {
            if (sService.equals(m_serviceNames[i]))
                return true;
        }
        return false;
    }

    public String[] getSupportedServiceNames() {
		return getServiceNames();
    }


    // To be accessed by a static context
	public static String[] getServiceNames() {
		return m_serviceNames;
	}


    /*>> XLinguServiceEventBroadcaster */


    public boolean addLinguServiceEventListener(XLinguServiceEventListener xLinEvLis) {

		boolean ret = false;
		if (xLinEvLis == null) {
			ret = false;
		} else {
			xEventListeners.add(xLinEvLis);
			ret = true;
		}

		return ret;
    }

    public boolean removeLinguServiceEventListener(XLinguServiceEventListener xLinEvLis) {
		boolean ret = false;
		if (xLinEvLis == null) {
			ret = false;
		} else {
			if (xEventListeners.contains(xLinEvLis)) {
				xEventListeners.remove(xLinEvLis);
				ret = true;
			} else {
				ret = false;
			}
		}
		return ret;
    }

    /*<< XLinguServiceEventBroadcaster*/

    /*>> XJobExecutor */
    public void trigger(String sEvent) {
        if (sEvent.equals("about")) {
            final AboutThread aboutthread = new AboutThread(this.m_xContext);
            aboutthread.start();
        }
    }

    /*<< XJobExecutor */

    /* >> XServiceDisplayName */
    public String getServiceDisplayName(Locale arg0) {
        return "CoGrOO";
    }

    // com.sun.star.lang.XInitialization:
    public void initialize( Object[] object )
        throws com.sun.star.uno.Exception
    {
        if ( object.length > 0 )
        {
            m_xFrame = (com.sun.star.frame.XFrame)UnoRuntime.queryInterface(
                com.sun.star.frame.XFrame.class, object[0]);
        }
    }

    // com.sun.star.frame.XDispatch:
     public void dispatch( com.sun.star.util.URL aURL,
                           com.sun.star.beans.PropertyValue[] aArguments )
    {
         if ( aURL.Protocol.compareTo("org.cogroo.addon:") == 0 )
        {
            if ( aURL.Path.compareTo("ReportError") == 0 )
            {
                XTextDocument xDoc = (XTextDocument) UnoRuntime.queryInterface(
                XTextDocument.class, m_xFrame.getController().getModel());
                SelectedTextExtractor extractor = new SelectedTextExtractor(m_xContext, xDoc);

                final ErrorReportDialogThread reporterrorthread = new ErrorReportDialogThread(this.m_xContext);
                reporterrorthread.setText(extractor.getSelectedText());
                reporterrorthread.start();
            }
        }
    }

    public void addStatusListener( com.sun.star.frame.XStatusListener xControl,
                                    com.sun.star.util.URL aURL )
    {
        // add your own code here
    }

    public void removeStatusListener( com.sun.star.frame.XStatusListener xControl,
                                       com.sun.star.util.URL aURL )
    {
        // add your own code here
    }

    // com.sun.star.frame.XDispatchProvider:
    public com.sun.star.frame.XDispatch queryDispatch( com.sun.star.util.URL aURL,
                                                       String sTargetFrameName,
                                                       int iSearchFlags )
    {
        if ( aURL.Protocol.compareTo("org.cogroo.addon:") == 0 )
        {
            if ( aURL.Path.compareTo("ReportError") == 0 )
                return this;
        }
        return null;
    }

    // com.sun.star.frame.XDispatchProvider:
    public com.sun.star.frame.XDispatch[] queryDispatches(
         com.sun.star.frame.DispatchDescriptor[] seqDescriptors )
    {
        int nCount = seqDescriptors.length;
        com.sun.star.frame.XDispatch[] seqDispatcher =
            new com.sun.star.frame.XDispatch[seqDescriptors.length];

        for( int i=0; i < nCount; ++i )
        {
            seqDispatcher[i] = queryDispatch(seqDescriptors[i].FeatureURL,
                                             seqDescriptors[i].FrameName,
                                             seqDescriptors[i].SearchFlags );
        }
        return seqDispatcher;
    }

    
    public Object execute(NamedValue[] args) throws IllegalArgumentException, com.sun.star.uno.Exception {
        XModel xModel = null;
        boolean correctEvent = false;

        for (NamedValue arg : args) {
            if (arg.Name.equals("Environment")) {
                NamedValue[] values = (NamedValue[]) AnyConverter.toObject(
                        new Type("[]com.sun.star.beans.NamedValue"),
                        arg.Value);
                for (NamedValue value : values) {
                    if (value.Name.equals("EnvType")
                            && value.Value.equals("DOCUMENTEVENT")) {
                        correctEvent = true;
                    } else if (value.Name.equals("EventName")) {
                    } else if (value.Name.equals("Model")) {
                        xModel = (XModel)UnoRuntime.queryInterface(XModel.class,
                                value.Value);
                    }
                }
            }
        }


        if (correctEvent) {
            ContextMenuInterceptor interceptor = new ContextMenuInterceptor();
            XContextMenuInterceptor xInterceptor = (XContextMenuInterceptor)UnoRuntime.queryInterface(XContextMenuInterceptor.class,
                    interceptor);
            XController xController = xModel.getCurrentController();
            XContextMenuInterception xInterception = (XContextMenuInterception)UnoRuntime.queryInterface(XContextMenuInterception.class, xController);
            xInterception.registerContextMenuInterceptor(xInterceptor);
            
        }
        return null;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy