Package com.salesforce.ide.core.remote.tooling

Source Code of com.salesforce.ide.core.remote.tooling.MetadataContainerFailureHandler

/*******************************************************************************
* Copyright (c) 2014 Salesforce.com, inc..
* 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:
*     Salesforce.com, inc. - initial API and implementation
******************************************************************************/
package com.salesforce.ide.core.remote.tooling;

import org.apache.log4j.Logger;

import com.salesforce.ide.core.project.ForceProject;
import com.salesforce.ide.core.remote.ForceRemoteException;
import com.salesforce.ide.core.remote.ToolingStubExt;
import com.sforce.soap.tooling.Error;
import com.sforce.soap.tooling.MetadataContainer;
import com.sforce.soap.tooling.QueryResult;
import com.sforce.soap.tooling.SaveResult;
import com.sforce.soap.tooling.StatusCode;

/**
* Handles the different errors that we might encounter when trying to interact with MetadataContainers.
*
* @author nchen
*
*/
public class MetadataContainerFailureHandler {
    private static final Logger logger = Logger.getLogger(MetadataContainerFailureHandler.class);

    private ForceProject forceProject;
    private ToolingStubExt stub;

    public MetadataContainerFailureHandler(ForceProject forceProject, ToolingStubExt stub) {
        this.forceProject = forceProject;
        this.stub = stub;
    }

    public void handleCreationFailure(SaveResult[] containerResults) {
        assert containerResults.length == 1; // We only deal with one MetadataContainer at a time
        for (Error error : containerResults[0].getErrors()) {
            if (error.getStatusCode() == StatusCode.DUPLICATE_VALUE) {
                attemptToDeleteDuplicate();
            }
        }
    }

    private void attemptToDeleteDuplicate() {
        try {
            String projectIdentifier = forceProject.getProjectIdentifier();
            String soql = String.format("SELECT Id FROM MetadataContainer WHERE name = '%s'", projectIdentifier);
            QueryResult queryResult = stub.query(soql);
            MetadataContainer duplicateContainer = (MetadataContainer) queryResult.getRecords()[0];
            stub.delete(new String[] { duplicateContainer.getId() });
        } catch (ForceRemoteException e) {
            // Let's not try to do nested recovery from a failure handler. Log it.
            logger.debug(e);
        }
    }

}
TOP

Related Classes of com.salesforce.ide.core.remote.tooling.MetadataContainerFailureHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.