/******************************************************************************* * Copyright (c) 2012-2017 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.resources.impl; import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; import org.eclipse.che.ide.api.resources.Resource; import org.eclipse.che.ide.api.resources.ResourceDelta; import org.eclipse.che.ide.resource.Path; /** * Default implementation of the {@code ResourceDelta}. * * @author Vlad Zhukovskiy * @see ResourceDelta * @since 4.4.0 */ @Beta public class ResourceDeltaImpl implements ResourceDelta { private Resource newResource; private Resource oldResource; protected static int KIND_MASK = 0xF; protected int status; public ResourceDeltaImpl(Resource resource, int status) { this(resource, null, status); } public ResourceDeltaImpl(Resource newResource, Resource oldResource, int status) { this.newResource = Preconditions.checkNotNull(newResource, "Null resource occurred"); this.oldResource = oldResource; this.status = status; } /** {@inheritDoc} */ @Override public int getKind() { return status & KIND_MASK; } /** {@inheritDoc} */ @Override public int getFlags() { return status & ~KIND_MASK; } /** {@inheritDoc} */ @Override public Path getFromPath() { if ((status & MOVED_FROM) != 0 || (status & COPIED_FROM) != 0) { return oldResource.getLocation(); } return null; } /** {@inheritDoc} */ @Override public Path getToPath() { if ((status & MOVED_TO) != 0) { return newResource.getLocation(); } return null; } /** {@inheritDoc} */ @Override public Resource getResource() { return newResource; } /** {@inheritDoc} */ @Override public String toString() { return MoreObjects.toStringHelper(this) .addValue(getDebugInfo()) .toString(); } protected String getDebugInfo() { final StringBuilder sb = new StringBuilder(getResource().getLocation().toString()); sb.append('['); switch (getKind()) { case ADDED: sb.append("created"); break; case REMOVED: sb.append("removed"); break; case UPDATED: sb.append("updated"); break; default: sb.append('?'); break; } sb.append("]: {"); int changeFlags = getFlags(); boolean prev = false; if ((changeFlags & CONTENT) != 0) { sb.append("CONTENT"); prev = true; } if ((changeFlags & MOVED_FROM) != 0) { if (prev) { sb.append(" | "); } sb.append("MOVED_FROM(").append(getFromPath()).append(")"); prev = true; } if ((changeFlags & MOVED_TO) != 0) { if (prev) { sb.append(" | "); } sb.append("MOVED_TO(").append(getToPath()).append(")"); prev = true; } if ((changeFlags & COPIED_FROM) != 0) { if (prev) { sb.append(" | "); } sb.append("COPIED_FROM(").append(getFromPath()).append(")"); } sb.append("}"); return sb.toString(); } }