/* * Copyright (C) 2006, 2007 Dennis Hunziker, Ueli Kistler */ package org.python.pydev.refactoring.tests.codegenerator.overridemethods; import java.util.ArrayList; import java.util.List; import org.python.pydev.core.IGrammarVersionProvider; import org.python.pydev.core.MisconfigurationException; import org.python.pydev.core.docutils.StringUtils; import org.python.pydev.parser.jython.ast.factory.AdapterPrefs; import org.python.pydev.refactoring.ast.adapters.ClassDefAdapter; import org.python.pydev.refactoring.ast.adapters.FunctionDefAdapter; import org.python.pydev.refactoring.ast.adapters.IClassDefAdapter; import org.python.pydev.refactoring.ast.adapters.ModuleAdapter; import org.python.pydev.refactoring.codegenerator.overridemethods.request.OverrideMethodsRequest; import org.python.pydev.refactoring.core.request.IRequestProcessor; public class MockupOverrideMethodsRequestProcessor implements IRequestProcessor<OverrideMethodsRequest> { private ModuleAdapter module; private String classSelection; private int offsetStrategy; private List<Integer> methodSelection; private int editClass; private MockupOverrideMethodsRequestProcessor(ModuleAdapter module, String classSelection, List<Integer> methodSelection, int offsetStrategy, int editClass) { this.module = module; this.methodSelection = methodSelection; this.classSelection = classSelection; this.offsetStrategy = offsetStrategy; this.editClass = editClass; } public MockupOverrideMethodsRequestProcessor(ModuleAdapter module, MockupOverrideMethodsConfig config) { this(module, config.getClassSelection(), config.getMethodSelection(), config.getOffsetStrategy(), config .getEditClass()); } public List<OverrideMethodsRequest> getRefactoringRequests() throws MisconfigurationException { ClassDefAdapter clazz = (ClassDefAdapter) module.getClasses().get(editClass); IClassDefAdapter clazzSelection; int parsedInt = -1; try { parsedInt = Integer.parseInt(classSelection); } catch (NumberFormatException e) { } if (parsedInt != -1) { clazzSelection = module.getClasses().get(parsedInt); } else { List<String> split = StringUtils.split(classSelection, ","); if (split.size() != 2) { throw new RuntimeException("Right now can only handle with a single comma."); } clazzSelection = module.getClasses().get(Integer.parseInt(split.get(0))); List<IClassDefAdapter> classHierarchy = module.getClassHierarchy(clazz); boolean found = false; StringBuffer foundClasses = new StringBuffer("\nFound classes:"); for (IClassDefAdapter iClassDefAdapter : classHierarchy) { foundClasses.append(iClassDefAdapter.getName()); if (iClassDefAdapter.getName().equals(split.get(1))) { clazzSelection = iClassDefAdapter; found = true; break; } } if (!found) { String message = "Could not find: " + split.get(1) + foundClasses; throw new RuntimeException(message); } } String baseClassName = clazzSelection.getName(); List<FunctionDefAdapter> methods = new ArrayList<FunctionDefAdapter>(); for (Object o : methodSelection) { if (o instanceof Integer) { methods.add(clazzSelection.getFunctions().get((Integer) o)); } else if (o instanceof String) { List<FunctionDefAdapter> functions = clazzSelection.getFunctions(); boolean found = false; for (FunctionDefAdapter f : functions) { if (f.getName().equals(o)) { methods.add(f); found = true; break; } } if (!found) { throw new RuntimeException("Unable to find:" + o); } } else { throw new RuntimeException("Unable to recognize: " + o); } } List<OverrideMethodsRequest> requests = new ArrayList<OverrideMethodsRequest>(); for (FunctionDefAdapter method : methods) { OverrideMethodsRequest req = new OverrideMethodsRequest(clazz, this.offsetStrategy, method, false, baseClassName, new AdapterPrefs("\n", new IGrammarVersionProvider() { public int getGrammarVersion() throws MisconfigurationException { return IGrammarVersionProvider.GRAMMAR_PYTHON_VERSION_2_7; } })); requests.add(req); } return requests; } }