'''
Created on 26.10.2012

@author: volkdir
'''

cmd = 'onSave'

if cmd == 'onSave':
    from org.eclipse.jface.action import Action 
    from org.eclipse.jface.dialogs import MessageDialog 
    from org.eclipse.jface.dialogs import InputDialog
    from org.eclipse.jface.action import MenuManager #@UnresolvedImport
    from org.eclipse.jface.action import ActionContributionItem #@UnresolvedImport
    from org.eclipse.ui import IWorkbenchWindowActionDelegate 
    from org.eclipse.ui import IWorkbench 
    from org.eclipse.ui import PlatformUI 
    from org.eclipse.ui import IWorkbenchWindow 
    from java.lang import Runnable #@UnresolvedImport
    from org.eclipse.swt import SWT #@UnresolvedImport
    #from org.eclipse.ui.part import FileEditorInput #@UnresolvedImport
    from org.eclipse.jdt.core import JavaCore #@UnresolvedImport
    from org.eclipse.jdt.core import ICompilationUnit #@UnresolvedImport
    from org.eclipse.ltk.core.refactoring import RefactoringCore #@UnresolvedImport
    from org.eclipse.ltk.core.refactoring import RefactoringStatus #@UnresolvedImport
    from org.eclipse.core.runtime import NullProgressMonitor #@UnresolvedImport
    from org.eclipse.jdt.core.refactoring import IJavaRefactorings #@UnresolvedImport
    from org.tigris.subversion.subclipse.ui.operations import SwitchOperation #@UnresolvedImport
    from org.tigris.subversion.subclipse.core.resources import SVNWorkspaceRoot #@UnresolvedImport
    from org.tigris.subversion.subclipse.core import ISVNLocalResource #@UnresolvedImport
    from org.tigris.subversion.subclipse.core import ISVNCoreConstants #@UnresolvedImport
    from org.tigris.subversion.svnclientadapter import SVNRevision #@UnresolvedImport
    from org.tigris.subversion.subclipse.ui.conflicts import SVNConflictResolver #@UnresolvedImport
    from org.tigris.subversion.svnclientadapter import ISVNConflictResolver #@UnresolvedImport
    from org.tigris.subversion.svnclientadapter import SVNUrl #@UnresolvedImport
        
    class ExampleCommand41(Action):
        def __init__(self,text,window):
            self.setText(text)
            self.window = window
        def run(self):
            editor = self.window.getActivePage().getActiveEditor();
            page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
            MessageDialog.openInformation(editor.getSite().getShell(), "Example2", "Active Hallo\n" + __name__ );
            navigatorViewRef = page.findViewReference("org.eclipse.ui.views.ResourceNavigator")
            print "hallo"
            if navigatorViewRef != None:
                naviView = navigatorViewRef.getView(False)
                for sel in naviView.getSite().getSelectionProvider().getSelection().toArray():
                    cu = JavaCore.createCompilationUnitFrom(sel)
                    myclass = cu.getTypes()[0]
                    print cu.getResource().getProject().getName( )
            else:
                print "no navi"
                     

            
    class SvnAction(Action):
        def __init__(self,text,window):
            self.setText(text)
            self.window = window
        def run(self):
            shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()
            page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
            navigatorViewRef = page.findViewReference("org.eclipse.ui.views.ResourceNavigator")
            
            if navigatorViewRef != None:
                naviView = navigatorViewRef.getView(False)
                allresources = naviView.getSite().getSelectionProvider().getSelection().toArray()
                urls = [] 
                resources = []
                for sel in allresources:
                    svnResource = SVNWorkspaceRoot.getSVNResourceFor(sel)
                    url = svnResource.getStatus().getUrlString().replace("tags/latestSuccessful","trunk")
                    urls.append(SVNUrl(url))
                    resources.append(sel)
                    print str(sel) + "->" + url
                switchOperation = SwitchOperation(naviView,resources,urls,SVNRevision.HEAD)
                switchOperation.setDepth(ISVNCoreConstants.DEPTH_UNKNOWN)
                switchOperation.setSetDepth(False)
                switchOperation.setIgnoreExternals(False)
                switchOperation.setForce(True)
                switchOperation.setIgnoreAncestry(False)
                switchOperation.setCanRunAsJob(True)
                conflictResolver = SVNConflictResolver(resources[0], ISVNConflictResolver.Choice.postpone , ISVNConflictResolver.Choice.postpone, ISVNConflictResolver.Choice.postpone);
                switchOperation.setConflictResolver(conflictResolver)
                switchOperation.run();            
            else:
                print "no navi"
                                 

    class MassReplace(Action):
        def __init__(self,text,window):
            self.setText(text)
            self.window = window
        def run(self):
            shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()
            dialog = InputDialog(shell,"Mass Rename","Please enter substring to rename and new value seperated by slash","old/new",None)
            dialog.open()
            replace = dialog.getValue()
            if replace == None:
                return
            rsplit = replace.split("/")
            print rsplit[0] + "->" + rsplit[1]                     
            page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
            navigatorViewRef = page.findViewReference("org.eclipse.ui.views.ResourceNavigator")
            if navigatorViewRef != None:
                naviView = navigatorViewRef.getView(False)
                for sel in naviView.getSite().getSelectionProvider().getSelection().toArray():
                    cu = JavaCore.createCompilationUnitFrom(sel)
                    myclass = cu.getBuffer().getContents()
                    newclass = myclass.replace(rsplit[0],rsplit[1])
                    cu.getBuffer().setContents(newclass)
                    
    
                    
    class MassClassRename(Action):
        def __init__(self,text,window):
            self.setText(text)
            self.window = window
        def run(self):
            shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()
            dialog = InputDialog(shell,"Mass Rename","Please enter substring to rename and new value seperated by slash","old/new",None)
            dialog.open()
            replace = dialog.getValue()
            if replace == None:
                return
            rsplit = replace.split("/")
            print rsplit[0] + "->" + rsplit[1]                     
            page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
            navigatorViewRef = page.findViewReference("org.eclipse.ui.views.ResourceNavigator")
            if navigatorViewRef != None:
                naviView = navigatorViewRef.getView(False)
                for sel in naviView.getSite().getSelectionProvider().getSelection().toArray():
                    cu = JavaCore.createCompilationUnitFrom(sel)
                    myclass = cu.getTypes()[0]
                    newclass = myclass.getElementName().replace(rsplit[0],rsplit[1])
                    print myclass.getElementName() + "->" + newclass
                    self.rename(myclass, newclass)
             
                    
        
        def rename(self, type, newName):
            contribution = RefactoringCore.getRefactoringContribution(IJavaRefactorings.RENAME_TYPE)
            descriptor = contribution.createDescriptor()
            descriptor.setProject(type.getCompilationUnit().getResource().getProject().getName( ))
            descriptor.setNewName(newName)
            descriptor.setJavaElement(type);
            descriptor.setUpdateReferences(True);
 
            status = RefactoringStatus()
            refactoring = descriptor.createRefactoring(status);
            monitor = NullProgressMonitor();
            refactoring.checkInitialConditions(monitor);
            refactoring.checkFinalConditions(monitor);
            change = refactoring.createChange(monitor);
            change.perform(monitor);
            
                        
        
            
                    
    class MenuRecreateAction(IWorkbenchWindowActionDelegate):
        def dispose(self):
            pass
        def init(self,window):
            self.window = window
        def run(self):
            menumanger = self.window.getMenuManager()
                    
            action = SvnAction("Test",self.window)
            action.setAccelerator(SWT.ALT |SWT.CONTROL | ord('I'))
            #toxe.add(action)
            newmenumanager = menumanger.find('xentric.tool_to')
            if newmenumanager == None:
                newmenumanager = MenuManager('Pyhton Scripts',"xentric.tool_to")
                menumanger.add(newmenumanager)
            for x in newmenumanager.getItems():
                newmenumanager.remove(x)
            newmenumanager.add(action)
            action = MassClassRename("MassClassRename",self.window)
            action.setAccelerator(SWT.ALT |SWT.CONTROL | ord('O'))
            newmenumanager.add(action)
            action = MassReplace("MassReplace",self.window)
            action.setAccelerator(SWT.ALT |SWT.CONTROL | ord('L'))
            newmenumanager.add(action)
            print newmenumanager.getMenuText()
            #menumanger.replaceItem("net.sf.groovyMonkey.menuName",newmenumanager)
            menumanger.updateAll( True );
            print "update1"
            
            
    class MyRun(Runnable):
        def __init__(self,window):
            self.window = window
        def run(self):
            action = MenuRecreateAction()
            action.init(self.window)
            action.run()
    
    window = PlatformUI.getWorkbench().getWorkbenchWindows()[0]
    window.getShell().getDisplay().asyncExec(MyRun(window))
    
