Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.releng.predicates/src/org/eclipse/emf/cdo/releng/predicates/impl/FilePredicateImpl.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.predicates/src/org/eclipse/emf/cdo/releng/predicates/impl/FilePredicateImpl.java392
1 files changed, 392 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.predicates/src/org/eclipse/emf/cdo/releng/predicates/impl/FilePredicateImpl.java b/plugins/org.eclipse.emf.cdo.releng.predicates/src/org/eclipse/emf/cdo/releng/predicates/impl/FilePredicateImpl.java
new file mode 100644
index 0000000000..4fce36e583
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.releng.predicates/src/org/eclipse/emf/cdo/releng/predicates/impl/FilePredicateImpl.java
@@ -0,0 +1,392 @@
+/**
+ */
+package org.eclipse.emf.cdo.releng.predicates.impl;
+
+import org.eclipse.emf.cdo.releng.predicates.FilePredicate;
+import org.eclipse.emf.cdo.releng.predicates.PredicatesPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Status;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>File Predicate</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.releng.predicates.impl.FilePredicateImpl#getFilePattern <em>File Pattern</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.releng.predicates.impl.FilePredicateImpl#getContentPattern <em>Content Pattern</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class FilePredicateImpl extends MinimalEObjectImpl.Container implements FilePredicate
+{
+ /**
+ * The default value of the '{@link #getFilePattern() <em>File Pattern</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFilePattern()
+ * @generated
+ * @ordered
+ */
+ protected static final String FILE_PATTERN_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getFilePattern() <em>File Pattern</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getFilePattern()
+ * @generated
+ * @ordered
+ */
+ protected String filePattern = FILE_PATTERN_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getContentPattern() <em>Content Pattern</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getContentPattern()
+ * @generated
+ * @ordered
+ */
+ protected static final String CONTENT_PATTERN_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getContentPattern() <em>Content Pattern</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getContentPattern()
+ * @generated
+ * @ordered
+ */
+ protected String contentPattern = CONTENT_PATTERN_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected FilePredicateImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return PredicatesPackage.Literals.FILE_PREDICATE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getFilePattern()
+ {
+ return filePattern;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setFilePattern(String newFilePattern)
+ {
+ String oldFilePattern = filePattern;
+ filePattern = newFilePattern;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, PredicatesPackage.FILE_PREDICATE__FILE_PATTERN,
+ oldFilePattern, filePattern));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getContentPattern()
+ {
+ return contentPattern;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setContentPattern(String newContentPattern)
+ {
+ String oldContentPattern = contentPattern;
+ contentPattern = newContentPattern;
+ if (eNotificationRequired())
+ {
+ eNotify(new ENotificationImpl(this, Notification.SET, PredicatesPackage.FILE_PREDICATE__CONTENT_PATTERN,
+ oldContentPattern, contentPattern));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public boolean matches(IProject project)
+ {
+ String filePattern = getFilePattern();
+ if (filePattern != null)
+ {
+ StringBuilder pattern = new StringBuilder();
+ for (int i = 0, length = filePattern.length(); i < length; ++i)
+ {
+ char character = filePattern.charAt(i);
+ if (!Character.isJavaIdentifierPart(character))
+ {
+ if (character == '*')
+ {
+ if (i + 1 < length && filePattern.charAt(i + 1) == '*')
+ {
+ ++i;
+ pattern.append(".*");
+ }
+ else
+ {
+ pattern.append("[^/]*");
+ }
+ }
+ else if (character == '?')
+ {
+ pattern.append("[^/]");
+ }
+ else
+ {
+ pattern.append('\\');
+ pattern.append(character);
+ }
+ }
+ else
+ {
+ pattern.append(character);
+ }
+ }
+
+ try
+ {
+ final Pattern regex = Pattern.compile(pattern.toString());
+ final CoreException matched = new CoreException(Status.OK_STATUS);
+ final Pattern contentPattern = getContentPattern() == null ? null : Pattern.compile(getContentPattern());
+ try
+ {
+ project.accept(new IResourceVisitor()
+ {
+ public boolean visit(IResource resource) throws CoreException
+ {
+ String path = resource.getProjectRelativePath().toString();
+ if (regex.matcher(path).matches())
+ {
+ if (contentPattern == null)
+ {
+ throw matched;
+ }
+
+ if (resource.getType() == IResource.FILE)
+ {
+ IFile file = (IFile)resource;
+ String charset = file.getCharset();
+ InputStream inputStream = null;
+ try
+ {
+ inputStream = file.getContents();
+ BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
+ byte[] input = new byte[bufferedInputStream.available()];
+ bufferedInputStream.read(input);
+ String contents = charset == null ? new String(input) : new String(input, charset);
+ if (contentPattern.matcher(contents).find())
+ {
+ throw matched;
+ }
+ }
+ catch (IOException ex)
+ {
+ // Ignore.
+ }
+ finally
+ {
+ if (inputStream != null)
+ {
+ try
+ {
+ inputStream.close();
+ }
+ catch (IOException ex)
+ {
+ // Ignore.
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+ });
+ }
+ catch (CoreException ex)
+ {
+ if (ex == matched)
+ {
+ return true;
+ }
+ }
+ }
+ catch (PatternSyntaxException exception)
+ {
+ // Ignore
+ }
+ }
+ return false;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case PredicatesPackage.FILE_PREDICATE__FILE_PATTERN:
+ return getFilePattern();
+ case PredicatesPackage.FILE_PREDICATE__CONTENT_PATTERN:
+ return getContentPattern();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case PredicatesPackage.FILE_PREDICATE__FILE_PATTERN:
+ setFilePattern((String)newValue);
+ return;
+ case PredicatesPackage.FILE_PREDICATE__CONTENT_PATTERN:
+ setContentPattern((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case PredicatesPackage.FILE_PREDICATE__FILE_PATTERN:
+ setFilePattern(FILE_PATTERN_EDEFAULT);
+ return;
+ case PredicatesPackage.FILE_PREDICATE__CONTENT_PATTERN:
+ setContentPattern(CONTENT_PATTERN_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case PredicatesPackage.FILE_PREDICATE__FILE_PATTERN:
+ return FILE_PATTERN_EDEFAULT == null ? filePattern != null : !FILE_PATTERN_EDEFAULT.equals(filePattern);
+ case PredicatesPackage.FILE_PREDICATE__CONTENT_PATTERN:
+ return CONTENT_PATTERN_EDEFAULT == null ? contentPattern != null : !CONTENT_PATTERN_EDEFAULT
+ .equals(contentPattern);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException
+ {
+ switch (operationID)
+ {
+ case PredicatesPackage.FILE_PREDICATE___MATCHES__IPROJECT:
+ return matches((IProject)arguments.get(0));
+ }
+ return super.eInvoke(operationID, arguments);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString()
+ {
+ if (eIsProxy())
+ {
+ return super.toString();
+ }
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (filePattern: ");
+ result.append(filePattern);
+ result.append(", contentPattern: ");
+ result.append(contentPattern);
+ result.append(')');
+ return result.toString();
+ }
+
+} // FilePredicateImpl

Back to the top