/******************************************************************************* * Copyright (c) 2012-2015 Codenvy, S.A. * 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: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.actions; import org.eclipse.che.api.analytics.client.logger.AnalyticsEventLogger; import org.eclipse.che.api.vfs.gwt.client.VfsServiceClient; import org.eclipse.che.api.vfs.shared.dto.ReplacementSet; import org.eclipse.che.api.vfs.shared.dto.Variable; import org.eclipse.che.ide.api.action.Action; import org.eclipse.che.ide.api.action.ActionEvent; import org.eclipse.che.ide.api.app.AppContext; import org.eclipse.che.ide.collections.Collections; import org.eclipse.che.ide.dto.DtoFactory; import org.eclipse.che.ide.rest.AsyncRequestCallback; import org.eclipse.che.ide.util.loging.Log; import javax.inject.Inject; import java.util.Arrays; import java.util.Map; /** * @author Sergii Leschenko */ public class FindReplaceAction extends Action { private final VfsServiceClient vfsServiceClient; private final DtoFactory dtoFactory; private final AppContext appContext; private final AnalyticsEventLogger eventLogger; @Inject public FindReplaceAction(VfsServiceClient vfsServiceClient, DtoFactory dtoFactory, AppContext appContext, AnalyticsEventLogger eventLogger) { this.vfsServiceClient = vfsServiceClient; this.dtoFactory = dtoFactory; this.appContext = appContext; this.eventLogger = eventLogger; } @Override public void actionPerformed(ActionEvent event) { eventLogger.log(this); if (appContext.getCurrentProject() == null || appContext.getCurrentProject().getRootProject() == null) { Log.error(getClass(), "Can not run find/replace without opened project\n"); return; } if (event.getParameters() == null) { Log.error(getClass(), "Can not run find/replace without parameters"); return; } final Map<String, String> parameters = event.getParameters(); String file = parameters.get("in"); String find = parameters.get("find"); String replace = parameters.get("replace"); String mode = parameters.get("replaceMode"); final ReplacementSet replacementSet = dtoFactory.createDto(ReplacementSet.class).withFiles(Arrays.asList(file)) .withEntries(Arrays.asList(dtoFactory.createDto(Variable.class) .withFind(find) .withReplace(replace) .withReplacemode(mode))); vfsServiceClient.replaceInCurrentWorkspace(appContext.getCurrentProject().getRootProject(), Collections.createArray(replacementSet), new AsyncRequestCallback<Void>() { @Override protected void onSuccess(Void result) { //TODO Send event described in IDEX-1743 } @Override protected void onFailure(Throwable exception) { } }); } }