/*******************************************************************************
* Copyright 2011 Google Inc. All Rights Reserved.
*
* 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
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
package com.gwtplugins.gwt.eclipse.gss.clientbundle;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.core.runtime.content.IContentDescription;
import org.eclipse.core.runtime.content.ITextContentDescriber;
import org.eclipse.wst.css.core.internal.contenttype.ContentDescriberForCSS;
import com.google.gdt.eclipse.core.ContentDescriberUtilities;
import com.google.gwt.eclipse.core.nature.GWTNature;
/**
* Describes <code>.css</code> files that can contain CssResource-specific extensions, such as @if.
* <p>
* This first delegates to the regular CSS content describer since if it cannot recognize the CSS file, neither can we
* (CssResource extensions follow CSS syntax, so the regular CSS describer should not fail when it sees them.)
*/
@SuppressWarnings("restriction")
public class GssResourceContentDescriber implements ITextContentDescriber {
private final ContentDescriberForCSS regularCssContentDescriber = new ContentDescriberForCSS();
@Override
public int describe(InputStream contents, IContentDescription description) throws IOException {
// if (regularCssContentDescriber.describe(contents, description) == INVALID) {
// return INVALID;
// }
return describe(ContentDescriberUtilities.resolveFileFromInputStream(contents));
}
@Override
public int describe(Reader contents, IContentDescription description) throws IOException {
// if (regularCssContentDescriber.describe(contents, description) == INVALID) {
// return INVALID;
// }
return describe(ContentDescriberUtilities.resolveFileFromReader(contents));
}
@Override
public QualifiedName[] getSupportedOptions() {
QualifiedName[] qualifiedName = regularCssContentDescriber.getSupportedOptions();
return qualifiedName;
}
private int describe(IFile file) {
if (file == null) {
return INDETERMINATE;
}
IProject project = file.getProject();
if (project == null) {
return INDETERMINATE;
}
boolean isGwtNature = GWTNature.isGWTProject(project);
int value = file != null && isGwtNature ? VALID : INDETERMINATE;
return value;
}
}