/** * Copyright 2010 JBoss Inc * * 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.drools.ide.common.assistant.refactor; import java.util.ArrayList; import java.util.List; import org.drools.ide.common.assistant.info.RuleRefactorInfo; import org.drools.ide.common.assistant.info.drl.DRLContentTypeEnum; import org.drools.ide.common.assistant.info.drl.DRLRuleRefactorInfo; import org.drools.ide.common.assistant.info.drl.RuleBasicContentInfo; import org.drools.ide.common.assistant.option.AssistantOption; import org.drools.ide.common.assistant.option.RenameAssistantOption; import org.drools.ide.common.assistant.option.ReplaceAssistantOption; import org.drools.ide.common.assistant.refactor.drl.FixImport; import org.drools.ide.common.assistant.refactor.drl.VariableBinding; import org.drools.ide.common.assistant.refactor.drl.VariableRename; public class DRLRuleRefactor extends AbstractRuleRefactor { public DRLRuleRefactor(RuleRefactorInfo refactorInfo) { this.ruleRefactorInfo = refactorInfo; this.options = new ArrayList<AssistantOption>(); } @Override public List<AssistantOption> execute(int offset) { this.offset = offset; RuleBasicContentInfo contentInfo = ((DRLRuleRefactorInfo)ruleRefactorInfo).getContentAt(offset); if (contentInfo==null) return this.options; if ((option = this.bindVariable(contentInfo))!=null) this.options.add(option); if ((option = this.fixImports(contentInfo))!=null) this.options.add(option); if ((option = this.renameVariable(contentInfo))!=null) this.options.add(option); return this.options; } @Override protected AssistantOption bindVariable(RuleBasicContentInfo contentInfo) { if (contentInfo==null) return null; if (!contentInfo.getType().equals(DRLContentTypeEnum.RULE_LHS_LINE)) return null; String response = VariableBinding.execute(contentInfo, offset-contentInfo.getOffset()); if (response.equals(contentInfo.getContent())) return null; return new ReplaceAssistantOption("assign to variable", response, contentInfo.getOffset(), contentInfo.getContentLength(), offset); } @Override protected AssistantOption fixImports(RuleBasicContentInfo contentInfo) { if (contentInfo==null) return null; if (!contentInfo.getType().equals(DRLContentTypeEnum.RULE_LHS_LINE) && !contentInfo.getType().equals(DRLContentTypeEnum.RULE_RHS_LINE)) return null; List<RuleBasicContentInfo> imports = ((DRLRuleRefactorInfo)ruleRefactorInfo).getImports(); FixImport.execute(contentInfo, imports); return null; } @Override protected AssistantOption renameVariable(RuleBasicContentInfo contentInfo) { if (contentInfo==null) return null; if (!contentInfo.getType().equals(DRLContentTypeEnum.RULE_LHS_LINE) && !contentInfo.getType().equals(DRLContentTypeEnum.RULE_RHS_LINE)) return null; String variable; if ((variable = VariableRename.isPossible(contentInfo, offset-contentInfo.getOffset()))!=null) return new RenameAssistantOption("rename variable", variable, contentInfo, contentInfo.getOffset()); return null; } }