/******************************************************************************* * Copyright (c) 2010 György Orosz. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * György Orosz - initial API and implementation ******************************************************************************/ package org.erlide.wrangler.refactoring.core.internal; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.ltk.core.refactoring.RefactoringStatus; import org.erlide.wrangler.refactoring.backend.internal.StateDataToRecordRpcMessage; import org.erlide.wrangler.refactoring.core.SimpleOneStepWranglerRefactoring; import org.erlide.wrangler.refactoring.selection.IErlMemberSelection; import org.erlide.wrangler.refactoring.util.GlobalParameters; import com.ericsson.otp.erlang.OtpErlangList; import com.ericsson.otp.erlang.OtpErlangObject; import com.ericsson.otp.erlang.OtpErlangString; /** * Abstract refactoring for QuickCheck state data to record refactorings * * @author Gyorgy Orosz * @version %I%, %G% */ public abstract class QuickCheckStateRefactoring extends SimpleOneStepWranglerRefactoring { protected OtpErlangObject stateFuns; protected int fieldCount = 0; private String recordName; private List<String> fieldsNames; @Override public RefactoringStatus checkInitialConditions(final IProgressMonitor pm) throws CoreException, OperationCanceledException { // FIXME: what kind of preconditions do I need? final IErlMemberSelection sel = (IErlMemberSelection) GlobalParameters .getWranglerSelection(); final StateDataToRecordRpcMessage message = runFirst(sel); if (!message.isSuccessful()) { return RefactoringStatus.createFatalErrorStatus(message.getMessageString()); } fieldCount = message.getFieldCount(); stateFuns = message.getStateFuns(); return new RefactoringStatus(); } /** * @noreference This method is not intended to be referenced by clients. */ protected abstract StateDataToRecordRpcMessage runFirst(IErlMemberSelection sel); /** * Returns the count of fields which a new record may need * * @return coutn of fields */ public int getRecordFieldCount() { return fieldCount; } /** * Record data setter * * @param name * record name * @param fieldNames * field names */ public void setRecordData(final String name, final List<String> fieldNames) { recordName = name; fieldsNames = fieldNames; } protected String getRecordName() { return recordName; } protected OtpErlangList getFieldsName() { final ArrayList<OtpErlangString> f = new ArrayList<>(); for (final String s : fieldsNames) { f.add(new OtpErlangString(s)); } return new OtpErlangList(f.toArray(new OtpErlangString[0])); } }