/*******************************************************************************
* 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.Optional;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import org.eclipse.che.api.promises.client.Promise;
import org.eclipse.che.ide.api.resources.File;
import org.eclipse.che.ide.api.resources.marker.Marker;
import org.eclipse.che.ide.api.resources.marker.PresentableTextMarker;
import org.eclipse.che.ide.resource.Path;
import org.eclipse.che.ide.util.TextUtils;
/**
* Default implementation of the {@code File}.
*
* @author Vlad Zhukovskyi
* @see ResourceImpl
* @see File
* @since 4.4.0
*/
@Beta
class FileImpl extends ResourceImpl implements File {
private final String contentUrl;
private String modificationStamp;
@Inject
protected FileImpl(@Assisted Path path,
@Assisted String contentUrl,
@Assisted ResourceManager resourceManager) {
super(path, resourceManager);
this.contentUrl = contentUrl;
}
/** {@inheritDoc} */
@Override
public final int getResourceType() {
return FILE;
}
/** {@inheritDoc} */
@Override
public boolean isReadOnly() {
return false;
}
/** {@inheritDoc} */
@Override
public String getContentUrl() {
return contentUrl;
}
/** {@inheritDoc} */
@Override
public String getDisplayName() {
final Optional<Marker> optMarker = getMarker(PresentableTextMarker.ID);
if (optMarker.isPresent()) {
final PresentableTextMarker marker = (PresentableTextMarker)optMarker.get();
return marker.getPresentableText();
} else {
return getName();
}
}
/** {@inheritDoc} */
@Override
public String getExtension() {
final String entryName = getName();
int lastDotIndex = entryName.lastIndexOf('.');
if (lastDotIndex == -1) {
return null;
}
if (lastDotIndex == (entryName.length() - 1)) {
return "";
}
return entryName.substring(lastDotIndex + 1);
}
/** {@inheritDoc} */
@Override
public String getNameWithoutExtension() {
final String entryName = getName();
int lastDotIndex = entryName.lastIndexOf('.');
if (lastDotIndex == -1) {
return getName();
}
return entryName.substring(0, lastDotIndex);
}
/** {@inheritDoc} */
@Override
public Promise<Void> updateContent(String content) {
setModificationStamp(TextUtils.md5(content));
return resourceManager.write(this, content);
}
/** {@inheritDoc} */
@Override
public Promise<String> getContent() {
return resourceManager.read(this);
}
/** {@inheritDoc} */
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("path", getLocation())
.add("resource", getResourceType())
.add("contentUrl", contentUrl)
.toString();
}
@Override
public void setModificationStamp(String modificationStamp) {
this.modificationStamp = modificationStamp;
}
@Override
public String getModificationStamp() {
return modificationStamp;
}
}