You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/02/18 20:00:34 UTC
[1/3] camel git commit: CAMEL-9618: File endpoint - Move some options
from generic to file as they are file specifc
Repository: camel
Updated Branches:
refs/heads/master 95b60ce5e -> ca743cf73
CAMEL-9618: File endpoint - Move some options from generic to file as they are file specifc
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ca743cf7
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ca743cf7
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ca743cf7
Branch: refs/heads/master
Commit: ca743cf736b85915ac9432aaaef8997fed06a2b6
Parents: 9784d03
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Feb 18 19:48:07 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Feb 18 19:57:39 2016 +0100
----------------------------------------------------------------------
.../camel/component/file/FileConsumer.java | 2 +-
.../camel/component/file/FileEndpoint.java | 166 +++++++++++++++++++
.../component/file/GenericFileEndpoint.java | 161 ------------------
3 files changed, 167 insertions(+), 162 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/ca743cf7/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java b/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
index 16c5cd2..7ffc1a7 100644
--- a/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
+++ b/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
@@ -39,7 +39,7 @@ public class FileConsumer extends GenericFileConsumer<File> {
private String endpointPath;
private Set<String> extendedAttributes;
- public FileConsumer(GenericFileEndpoint<File> endpoint, Processor processor, GenericFileOperations<File> operations) {
+ public FileConsumer(FileEndpoint endpoint, Processor processor, GenericFileOperations<File> operations) {
super(endpoint, processor, operations);
this.endpointPath = endpoint.getConfiguration().getDirectory();
http://git-wip-us.apache.org/repos/asf/camel/blob/ca743cf7/camel-core/src/main/java/org/apache/camel/component/file/FileEndpoint.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/file/FileEndpoint.java b/camel-core/src/main/java/org/apache/camel/component/file/FileEndpoint.java
index 2d51753..a55dc6f 100644
--- a/camel-core/src/main/java/org/apache/camel/component/file/FileEndpoint.java
+++ b/camel-core/src/main/java/org/apache/camel/component/file/FileEndpoint.java
@@ -19,6 +19,9 @@ package org.apache.camel.component.file;
import java.io.File;
import java.io.FileNotFoundException;
import java.nio.file.Files;
+import java.nio.file.attribute.PosixFilePermission;
+import java.util.HashSet;
+import java.util.Set;
import org.apache.camel.Component;
import org.apache.camel.Exchange;
@@ -38,6 +41,10 @@ import org.apache.camel.util.ObjectHelper;
@UriEndpoint(scheme = "file", title = "File", syntax = "file:directoryName", consumerClass = FileConsumer.class, label = "core,file")
public class FileEndpoint extends GenericFileEndpoint<File> {
+ private static final Integer CHMOD_WRITE_MASK = 02;
+ private static final Integer CHMOD_READ_MASK = 04;
+ private static final Integer CHMOD_EXECUTE_MASK = 01;
+
private final FileOperations operations = new FileOperations(this);
@UriPath(name = "directoryName") @Metadata(required = "true")
@@ -50,6 +57,12 @@ public class FileEndpoint extends GenericFileEndpoint<File> {
private boolean forceWrites = true;
@UriParam(label = "consumer,advanced")
private boolean probeContentType;
+ @UriParam(label = "consumer,advanced")
+ private String extendedAttributes;
+ @UriParam(label = "producer,advanced")
+ private String chmod;
+ @UriParam(label = "producer,advanced")
+ private String chmodDirectory;
public FileEndpoint() {
// use marker file as default exclusive read locks
@@ -225,4 +238,157 @@ public class FileEndpoint extends GenericFileEndpoint<File> {
public void setProbeContentType(boolean probeContentType) {
this.probeContentType = probeContentType;
}
+
+
+ public String getExtendedAttributes() {
+ return extendedAttributes;
+ }
+
+ /**
+ * To define which file attributes of interest. Like posix:permissions,posix:owner,basic:lastAccessTime,
+ * it supports basic wildcard like posix:*, basic:lastAccessTime
+ */
+ public void setExtendedAttributes(String extendedAttributes) {
+ this.extendedAttributes = extendedAttributes;
+ }
+
+ /**
+ * Chmod value must be between 000 and 777; If there is a leading digit like in 0755 we will ignore it.
+ */
+ public boolean chmodPermissionsAreValid(String chmod) {
+ if (chmod == null || chmod.length() < 3 || chmod.length() > 4) {
+ return false;
+ }
+ String permissionsString = chmod.trim().substring(chmod.length() - 3); // if 4 digits chop off leading one
+ for (int i = 0; i < permissionsString.length(); i++) {
+ Character c = permissionsString.charAt(i);
+ if (!Character.isDigit(c) || Integer.parseInt(c.toString()) > 7) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public Set<PosixFilePermission> getPermissions() {
+ Set<PosixFilePermission> permissions = new HashSet<PosixFilePermission>();
+ if (ObjectHelper.isEmpty(chmod)) {
+ return permissions;
+ }
+
+ String chmodString = chmod.substring(chmod.length() - 3); // if 4 digits chop off leading one
+
+ Integer ownerValue = Integer.parseInt(chmodString.substring(0, 1));
+ Integer groupValue = Integer.parseInt(chmodString.substring(1, 2));
+ Integer othersValue = Integer.parseInt(chmodString.substring(2, 3));
+
+ if ((ownerValue & CHMOD_WRITE_MASK) > 0) {
+ permissions.add(PosixFilePermission.OWNER_WRITE);
+ }
+ if ((ownerValue & CHMOD_READ_MASK) > 0) {
+ permissions.add(PosixFilePermission.OWNER_READ);
+ }
+ if ((ownerValue & CHMOD_EXECUTE_MASK) > 0) {
+ permissions.add(PosixFilePermission.OWNER_EXECUTE);
+ }
+
+ if ((groupValue & CHMOD_WRITE_MASK) > 0) {
+ permissions.add(PosixFilePermission.GROUP_WRITE);
+ }
+ if ((groupValue & CHMOD_READ_MASK) > 0) {
+ permissions.add(PosixFilePermission.GROUP_READ);
+ }
+ if ((groupValue & CHMOD_EXECUTE_MASK) > 0) {
+ permissions.add(PosixFilePermission.GROUP_EXECUTE);
+ }
+
+ if ((othersValue & CHMOD_WRITE_MASK) > 0) {
+ permissions.add(PosixFilePermission.OTHERS_WRITE);
+ }
+ if ((othersValue & CHMOD_READ_MASK) > 0) {
+ permissions.add(PosixFilePermission.OTHERS_READ);
+ }
+ if ((othersValue & CHMOD_EXECUTE_MASK) > 0) {
+ permissions.add(PosixFilePermission.OTHERS_EXECUTE);
+ }
+
+ return permissions;
+ }
+
+ public String getChmod() {
+ return chmod;
+ }
+
+ /**
+ * Specify the file permissions which is sent by the producer, the chmod value must be between 000 and 777;
+ * If there is a leading digit like in 0755 we will ignore it.
+ */
+ public void setChmod(String chmod) throws Exception {
+ if (ObjectHelper.isNotEmpty(chmod) && chmodPermissionsAreValid(chmod)) {
+ this.chmod = chmod.trim();
+ } else {
+ throw new IllegalArgumentException("chmod option [" + chmod + "] is not valid");
+ }
+ }
+
+ public Set<PosixFilePermission> getDirectoryPermissions() {
+ Set<PosixFilePermission> permissions = new HashSet<PosixFilePermission>();
+ if (ObjectHelper.isEmpty(chmodDirectory)) {
+ return permissions;
+ }
+
+ String chmodString = chmodDirectory.substring(chmodDirectory.length() - 3); // if 4 digits chop off leading one
+
+ Integer ownerValue = Integer.parseInt(chmodString.substring(0, 1));
+ Integer groupValue = Integer.parseInt(chmodString.substring(1, 2));
+ Integer othersValue = Integer.parseInt(chmodString.substring(2, 3));
+
+ if ((ownerValue & CHMOD_WRITE_MASK) > 0) {
+ permissions.add(PosixFilePermission.OWNER_WRITE);
+ }
+ if ((ownerValue & CHMOD_READ_MASK) > 0) {
+ permissions.add(PosixFilePermission.OWNER_READ);
+ }
+ if ((ownerValue & CHMOD_EXECUTE_MASK) > 0) {
+ permissions.add(PosixFilePermission.OWNER_EXECUTE);
+ }
+
+ if ((groupValue & CHMOD_WRITE_MASK) > 0) {
+ permissions.add(PosixFilePermission.GROUP_WRITE);
+ }
+ if ((groupValue & CHMOD_READ_MASK) > 0) {
+ permissions.add(PosixFilePermission.GROUP_READ);
+ }
+ if ((groupValue & CHMOD_EXECUTE_MASK) > 0) {
+ permissions.add(PosixFilePermission.GROUP_EXECUTE);
+ }
+
+ if ((othersValue & CHMOD_WRITE_MASK) > 0) {
+ permissions.add(PosixFilePermission.OTHERS_WRITE);
+ }
+ if ((othersValue & CHMOD_READ_MASK) > 0) {
+ permissions.add(PosixFilePermission.OTHERS_READ);
+ }
+ if ((othersValue & CHMOD_EXECUTE_MASK) > 0) {
+ permissions.add(PosixFilePermission.OTHERS_EXECUTE);
+ }
+
+ return permissions;
+ }
+
+ public String getChmodDirectory() {
+ return chmodDirectory;
+ }
+
+ /**
+ * Specify the directory permissions used when the producer creates missing directories, the chmod value must be between 000 and 777;
+ * If there is a leading digit like in 0755 we will ignore it.
+ */
+ public void setChmodDirectory(String chmodDirectory) throws Exception {
+ if (ObjectHelper.isNotEmpty(chmodDirectory) && chmodPermissionsAreValid(chmodDirectory)) {
+ this.chmodDirectory = chmodDirectory.trim();
+ } else {
+ throw new IllegalArgumentException("chmodDirectory option [" + chmodDirectory + "] is not valid");
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/camel/blob/ca743cf7/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java b/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
index da6f235..518d127 100644
--- a/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
+++ b/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
@@ -59,10 +59,6 @@ public abstract class GenericFileEndpoint<T> extends ScheduledPollEndpoint imple
protected static final String DEFAULT_STRATEGYFACTORY_CLASS = "org.apache.camel.component.file.strategy.GenericFileProcessStrategyFactory";
protected static final int DEFAULT_IDEMPOTENT_CACHE_SIZE = 1000;
- private static final Integer CHMOD_WRITE_MASK = 02;
- private static final Integer CHMOD_READ_MASK = 04;
- private static final Integer CHMOD_EXECUTE_MASK = 01;
-
protected final Logger log = LoggerFactory.getLogger(getClass());
// common options
@@ -94,10 +90,6 @@ public abstract class GenericFileEndpoint<T> extends ScheduledPollEndpoint imple
protected String doneFileName;
@UriParam(label = "producer,advanced")
protected boolean allowNullBody;
- @UriParam(label = "producer,advanced")
- protected String chmod;
- @UriParam(label = "producer,advanced")
- protected String chmodDirectory;
// consumer options
@@ -184,8 +176,6 @@ public abstract class GenericFileEndpoint<T> extends ScheduledPollEndpoint imple
protected GenericFileExclusiveReadLockStrategy<T> exclusiveReadLockStrategy;
@UriParam(label = "consumer,advanced")
protected ExceptionHandler onCompletionExceptionHandler;
- @UriParam(label = "consumer,advanced")
- protected String extendedAttributes;
public GenericFileEndpoint() {
}
@@ -315,145 +305,6 @@ public abstract class GenericFileEndpoint<T> extends ScheduledPollEndpoint imple
}
}
- /**
- * Chmod value must be between 000 and 777; If there is a leading digit like in 0755 we will ignore it.
- */
- public boolean chmodPermissionsAreValid(String chmod) {
- if (chmod == null || chmod.length() < 3 || chmod.length() > 4) {
- return false;
- }
- String permissionsString = chmod.trim().substring(chmod.length() - 3); // if 4 digits chop off leading one
- for (int i = 0; i < permissionsString.length(); i++) {
- Character c = permissionsString.charAt(i);
- if (!Character.isDigit(c) || Integer.parseInt(c.toString()) > 7) {
- return false;
- }
- }
- return true;
- }
-
- public Set<PosixFilePermission> getPermissions() {
- Set<PosixFilePermission> permissions = new HashSet<PosixFilePermission>();
- if (ObjectHelper.isEmpty(chmod)) {
- return permissions;
- }
-
- String chmodString = chmod.substring(chmod.length() - 3); // if 4 digits chop off leading one
-
- Integer ownerValue = Integer.parseInt(chmodString.substring(0, 1));
- Integer groupValue = Integer.parseInt(chmodString.substring(1, 2));
- Integer othersValue = Integer.parseInt(chmodString.substring(2, 3));
-
- if ((ownerValue & CHMOD_WRITE_MASK) > 0) {
- permissions.add(PosixFilePermission.OWNER_WRITE);
- }
- if ((ownerValue & CHMOD_READ_MASK) > 0) {
- permissions.add(PosixFilePermission.OWNER_READ);
- }
- if ((ownerValue & CHMOD_EXECUTE_MASK) > 0) {
- permissions.add(PosixFilePermission.OWNER_EXECUTE);
- }
-
- if ((groupValue & CHMOD_WRITE_MASK) > 0) {
- permissions.add(PosixFilePermission.GROUP_WRITE);
- }
- if ((groupValue & CHMOD_READ_MASK) > 0) {
- permissions.add(PosixFilePermission.GROUP_READ);
- }
- if ((groupValue & CHMOD_EXECUTE_MASK) > 0) {
- permissions.add(PosixFilePermission.GROUP_EXECUTE);
- }
-
- if ((othersValue & CHMOD_WRITE_MASK) > 0) {
- permissions.add(PosixFilePermission.OTHERS_WRITE);
- }
- if ((othersValue & CHMOD_READ_MASK) > 0) {
- permissions.add(PosixFilePermission.OTHERS_READ);
- }
- if ((othersValue & CHMOD_EXECUTE_MASK) > 0) {
- permissions.add(PosixFilePermission.OTHERS_EXECUTE);
- }
-
- return permissions;
- }
-
- public String getChmod() {
- return chmod;
- }
-
- /**
- * Specify the file permissions which is sent by the producer, the chmod value must be between 000 and 777;
- * If there is a leading digit like in 0755 we will ignore it.
- */
- public void setChmod(String chmod) throws Exception {
- if (ObjectHelper.isNotEmpty(chmod) && chmodPermissionsAreValid(chmod)) {
- this.chmod = chmod.trim();
- } else {
- throw new IllegalArgumentException("chmod option [" + chmod + "] is not valid");
- }
- }
-
- public Set<PosixFilePermission> getDirectoryPermissions() {
- Set<PosixFilePermission> permissions = new HashSet<PosixFilePermission>();
- if (ObjectHelper.isEmpty(chmodDirectory)) {
- return permissions;
- }
-
- String chmodString = chmodDirectory.substring(chmodDirectory.length() - 3); // if 4 digits chop off leading one
-
- Integer ownerValue = Integer.parseInt(chmodString.substring(0, 1));
- Integer groupValue = Integer.parseInt(chmodString.substring(1, 2));
- Integer othersValue = Integer.parseInt(chmodString.substring(2, 3));
-
- if ((ownerValue & CHMOD_WRITE_MASK) > 0) {
- permissions.add(PosixFilePermission.OWNER_WRITE);
- }
- if ((ownerValue & CHMOD_READ_MASK) > 0) {
- permissions.add(PosixFilePermission.OWNER_READ);
- }
- if ((ownerValue & CHMOD_EXECUTE_MASK) > 0) {
- permissions.add(PosixFilePermission.OWNER_EXECUTE);
- }
-
- if ((groupValue & CHMOD_WRITE_MASK) > 0) {
- permissions.add(PosixFilePermission.GROUP_WRITE);
- }
- if ((groupValue & CHMOD_READ_MASK) > 0) {
- permissions.add(PosixFilePermission.GROUP_READ);
- }
- if ((groupValue & CHMOD_EXECUTE_MASK) > 0) {
- permissions.add(PosixFilePermission.GROUP_EXECUTE);
- }
-
- if ((othersValue & CHMOD_WRITE_MASK) > 0) {
- permissions.add(PosixFilePermission.OTHERS_WRITE);
- }
- if ((othersValue & CHMOD_READ_MASK) > 0) {
- permissions.add(PosixFilePermission.OTHERS_READ);
- }
- if ((othersValue & CHMOD_EXECUTE_MASK) > 0) {
- permissions.add(PosixFilePermission.OTHERS_EXECUTE);
- }
-
- return permissions;
- }
-
- public String getChmodDirectory() {
- return chmodDirectory;
- }
-
- /**
- * Specify the directory permissions used when the producer creates missing directories, the chmod value must be between 000 and 777;
- * If there is a leading digit like in 0755 we will ignore it.
- */
- public void setChmodDirectory(String chmodDirectory) throws Exception {
- if (ObjectHelper.isNotEmpty(chmodDirectory) && chmodPermissionsAreValid(chmodDirectory)) {
- this.chmodDirectory = chmodDirectory.trim();
- } else {
- throw new IllegalArgumentException("chmodDirectory option [" + chmodDirectory + "] is not valid");
- }
- }
-
public boolean isNoop() {
return noop;
}
@@ -1253,18 +1104,6 @@ public abstract class GenericFileEndpoint<T> extends ScheduledPollEndpoint imple
this.onCompletionExceptionHandler = onCompletionExceptionHandler;
}
- public String getExtendedAttributes() {
- return extendedAttributes;
- }
-
- /**
- * To define which file attributes of interest. Like posix:permissions,posix:owner,basic:lastAccessTime,
- * it supports basic wildcard like posix:*, basic:lastAccessTime
- */
- public void setExtendedAttributes(String extendedAttributes) {
- this.extendedAttributes = extendedAttributes;
- }
-
/**
* Configures the given message with the file which sets the body to the
* file object.
[2/3] camel git commit: CAMEL-9610: Add chmodDirectory to allow
setting file permissions on directories created by file producer.
Posted by da...@apache.org.
CAMEL-9610: Add chmodDirectory to allow setting file permissions on directories created by file producer.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/9784d030
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/9784d030
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/9784d030
Branch: refs/heads/master
Commit: 9784d030100e74a909c2f5fa6d2801b3dfc2a57a
Parents: 5be46e4
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Feb 18 18:42:43 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Feb 18 19:57:39 2016 +0100
----------------------------------------------------------------------
.../camel/component/file/FileOperations.java | 54 +++++++--
.../component/file/GenericFileEndpoint.java | 63 ++++++++++
.../FileProducerDirectoryChmodOptionTest.java | 117 +++++++++++++++++++
3 files changed, 226 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/9784d030/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java b/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
index 412d81a..c44c141 100644
--- a/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
+++ b/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
@@ -89,13 +89,47 @@ public class FileOperations implements GenericFileOperations<File> {
return file.exists();
}
+ protected boolean buildDirectory(File dir, Set<PosixFilePermission> permissions) {
+ if (dir.exists()) {
+ return true;
+ }
+
+ if (permissions == null || permissions.isEmpty()) {
+ return dir.mkdirs();
+ }
+
+ // create directory one part of a time and set permissions
+ try {
+ String[] parts = dir.getPath().split("\\" + File.separatorChar);
+ File base = new File(".");
+ for (String part : parts) {
+ File subDir = new File(base, part);
+ if (!subDir.exists()) {
+ if (subDir.mkdir()) {
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Setting chmod: {} on directory: {} ", PosixFilePermissions.toString(permissions), subDir);
+ }
+ Files.setPosixFilePermissions(subDir.toPath(), permissions);
+ } else {
+ return false;
+ }
+ }
+ base = new File(base, subDir.getName());
+ }
+ } catch (IOException e) {
+ throw new GenericFileOperationFailedException("Error setting chmod on directory: " + dir, e);
+ }
+
+ return true;
+ }
+
public boolean buildDirectory(String directory, boolean absolute) throws GenericFileOperationFailedException {
ObjectHelper.notNull(endpoint, "endpoint");
// always create endpoint defined directory
if (endpoint.isAutoCreate() && !endpoint.getFile().exists()) {
LOG.trace("Building starting directory: {}", endpoint.getFile());
- endpoint.getFile().mkdirs();
+ buildDirectory(endpoint.getFile(), endpoint.getDirectoryPermissions());
}
if (ObjectHelper.isEmpty(directory)) {
@@ -131,10 +165,8 @@ public class FileOperations implements GenericFileOperations<File> {
// the directory already exists
return true;
} else {
- if (LOG.isTraceEnabled()) {
- LOG.trace("Building directory: {}", path);
- }
- return path.mkdirs();
+ LOG.trace("Building directory: {}", path);
+ return buildDirectory(path, endpoint.getDirectoryPermissions());
}
}
}
@@ -246,8 +278,10 @@ public class FileOperations implements GenericFileOperations<File> {
if (ObjectHelper.isNotEmpty(endpoint.getChmod())) {
Set<PosixFilePermission> permissions = endpoint.getPermissions();
if (!permissions.isEmpty()) {
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Setting chmod: {} on file: {} ", PosixFilePermissions.toString(permissions), file);
+ }
Files.setPosixFilePermissions(file.toPath(), permissions);
- LOG.trace("Setting chmod: {} on file: {} ", PosixFilePermissions.toString(permissions), file);
}
}
// clear header as we have renamed the file
@@ -265,8 +299,10 @@ public class FileOperations implements GenericFileOperations<File> {
if (ObjectHelper.isNotEmpty(endpoint.getChmod())) {
Set<PosixFilePermission> permissions = endpoint.getPermissions();
if (!permissions.isEmpty()) {
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Setting chmod: {} on file: {} ", PosixFilePermissions.toString(permissions), file);
+ }
Files.setPosixFilePermissions(file.toPath(), permissions);
- LOG.trace("Setting chmod: {} on file: {} ", PosixFilePermissions.toString(permissions), file);
}
}
return true;
@@ -296,8 +332,10 @@ public class FileOperations implements GenericFileOperations<File> {
if (ObjectHelper.isNotEmpty(endpoint.getChmod())) {
Set<PosixFilePermission> permissions = endpoint.getPermissions();
if (!permissions.isEmpty()) {
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Setting chmod: {} on file: {} ", PosixFilePermissions.toString(permissions), file);
+ }
Files.setPosixFilePermissions(file.toPath(), permissions);
- LOG.trace("Setting chmod: {} on file: {} ", PosixFilePermissions.toString(permissions), file);
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/9784d030/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java b/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
index 0e20247..da6f235 100644
--- a/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
+++ b/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
@@ -96,6 +96,8 @@ public abstract class GenericFileEndpoint<T> extends ScheduledPollEndpoint imple
protected boolean allowNullBody;
@UriParam(label = "producer,advanced")
protected String chmod;
+ @UriParam(label = "producer,advanced")
+ protected String chmodDirectory;
// consumer options
@@ -391,6 +393,67 @@ public abstract class GenericFileEndpoint<T> extends ScheduledPollEndpoint imple
}
}
+ public Set<PosixFilePermission> getDirectoryPermissions() {
+ Set<PosixFilePermission> permissions = new HashSet<PosixFilePermission>();
+ if (ObjectHelper.isEmpty(chmodDirectory)) {
+ return permissions;
+ }
+
+ String chmodString = chmodDirectory.substring(chmodDirectory.length() - 3); // if 4 digits chop off leading one
+
+ Integer ownerValue = Integer.parseInt(chmodString.substring(0, 1));
+ Integer groupValue = Integer.parseInt(chmodString.substring(1, 2));
+ Integer othersValue = Integer.parseInt(chmodString.substring(2, 3));
+
+ if ((ownerValue & CHMOD_WRITE_MASK) > 0) {
+ permissions.add(PosixFilePermission.OWNER_WRITE);
+ }
+ if ((ownerValue & CHMOD_READ_MASK) > 0) {
+ permissions.add(PosixFilePermission.OWNER_READ);
+ }
+ if ((ownerValue & CHMOD_EXECUTE_MASK) > 0) {
+ permissions.add(PosixFilePermission.OWNER_EXECUTE);
+ }
+
+ if ((groupValue & CHMOD_WRITE_MASK) > 0) {
+ permissions.add(PosixFilePermission.GROUP_WRITE);
+ }
+ if ((groupValue & CHMOD_READ_MASK) > 0) {
+ permissions.add(PosixFilePermission.GROUP_READ);
+ }
+ if ((groupValue & CHMOD_EXECUTE_MASK) > 0) {
+ permissions.add(PosixFilePermission.GROUP_EXECUTE);
+ }
+
+ if ((othersValue & CHMOD_WRITE_MASK) > 0) {
+ permissions.add(PosixFilePermission.OTHERS_WRITE);
+ }
+ if ((othersValue & CHMOD_READ_MASK) > 0) {
+ permissions.add(PosixFilePermission.OTHERS_READ);
+ }
+ if ((othersValue & CHMOD_EXECUTE_MASK) > 0) {
+ permissions.add(PosixFilePermission.OTHERS_EXECUTE);
+ }
+
+ return permissions;
+ }
+
+ public String getChmodDirectory() {
+ return chmodDirectory;
+ }
+
+ /**
+ * Specify the directory permissions used when the producer creates missing directories, the chmod value must be between 000 and 777;
+ * If there is a leading digit like in 0755 we will ignore it.
+ */
+ public void setChmodDirectory(String chmodDirectory) throws Exception {
+ if (ObjectHelper.isNotEmpty(chmodDirectory) && chmodPermissionsAreValid(chmodDirectory)) {
+ this.chmodDirectory = chmodDirectory.trim();
+ } else {
+ throw new IllegalArgumentException("chmodDirectory option [" + chmodDirectory + "] is not valid");
+ }
+ }
+
public boolean isNoop() {
return noop;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/9784d030/camel-core/src/test/java/org/apache/camel/component/file/FileProducerDirectoryChmodOptionTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/component/file/FileProducerDirectoryChmodOptionTest.java b/camel-core/src/test/java/org/apache/camel/component/file/FileProducerDirectoryChmodOptionTest.java
new file mode 100644
index 0000000..932b767
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/component/file/FileProducerDirectoryChmodOptionTest.java
@@ -0,0 +1,117 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 org.apache.camel.component.file;
+
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.LinkOption;
+import java.nio.file.attribute.PosixFilePermission;
+import java.nio.file.attribute.PosixFilePermissions;
+import java.util.Date;
+import java.util.Set;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+
+public class FileProducerDirectoryChmodOptionTest extends ContextTestSupport {
+ public static final String TEST_DIRECTORY = "target/chmoddir/foo/";
+
+ @Override
+ protected void setUp() throws Exception {
+ deleteDirectory(TEST_DIRECTORY);
+ super.setUp();
+ }
+
+ private boolean canTest() {
+ // can not run on windows
+ return !isPlatform("windows");
+ }
+
+ public void testWriteValidNoDir() throws Exception {
+ if (!canTest()) {
+ return;
+ }
+
+ runChmodCheck("NoDir", null, "rwxr-xr-x");
+ }
+
+ public void testWriteValidChmod0755() throws Exception {
+ if (!canTest()) {
+ return;
+ }
+
+ runChmodCheck("0755", "rwxrwxrwx", "rwxr-xr-x");
+ }
+
+ public void testWriteValidChmod666() throws Exception {
+ if (!canTest()) {
+ return;
+ }
+
+ runChmodCheck("666", "rwxrwxrwx", "rw-rw-rw-");
+ }
+
+ private void runChmodCheck(String routeSuffix, String expectedDirectoryPermissions, String expectedPermissions) throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:chmod" + routeSuffix);
+ mock.expectedMessageCount(1);
+ String testFileName = "chmod" + routeSuffix + ".txt";
+ String fullTestFileName = TEST_DIRECTORY + testFileName;
+ String testFileContent = "Writing file with chmod " + routeSuffix + " option at " + new Date();
+ mock.expectedFileExists(fullTestFileName, testFileContent);
+
+ template.sendBodyAndHeader("direct:write" + routeSuffix, testFileContent, Exchange.FILE_NAME, testFileName);
+
+ if (expectedDirectoryPermissions != null) {
+ File d = new File(TEST_DIRECTORY);
+ Set<PosixFilePermission> permissions = Files.getPosixFilePermissions(d.toPath(), LinkOption.NOFOLLOW_LINKS);
+ assertEquals(expectedDirectoryPermissions, PosixFilePermissions.toString(permissions));
+ assertEquals(expectedDirectoryPermissions.replace("-", "").length(), permissions.size());
+ }
+
+ if (expectedPermissions != null) {
+ File f = new File(fullTestFileName);
+ Set<PosixFilePermission> permissions = Files.getPosixFilePermissions(f.toPath(), LinkOption.NOFOLLOW_LINKS);
+ assertEquals(expectedPermissions, PosixFilePermissions.toString(permissions));
+ assertEquals(expectedPermissions.replace("-", "").length(), permissions.size());
+ }
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ public void configure() {
+ // Valid chmod values
+ from("direct:write666")
+ .to("file://" + TEST_DIRECTORY + "?chmodDirectory=777&chmod=666")
+ .to("mock:chmod666");
+
+ from("direct:write0755")
+ .to("file://" + TEST_DIRECTORY + "?chmodDirectory=777&chmod=0755")
+ .to("mock:chmod0755");
+
+ from("direct:writeNoDir")
+ .to("file://" + TEST_DIRECTORY + "?chmod=0755")
+ .to("mock:chmodNoDir");
+
+ }
+ };
+ }
+}
[3/3] camel git commit: Maven name consistent with other components
Posted by da...@apache.org.
Maven name consistent with other components
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5be46e4e
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5be46e4e
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5be46e4e
Branch: refs/heads/master
Commit: 5be46e4e90df1b38723a3ab08f684265bdd6307e
Parents: 95b60ce
Author: Antonin Stefanutti <an...@stefanutti.fr>
Authored: Thu Feb 18 17:55:19 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Feb 18 19:57:39 2016 +0100
----------------------------------------------------------------------
components/camel-cdi/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/5be46e4e/components/camel-cdi/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-cdi/pom.xml b/components/camel-cdi/pom.xml
index 61296f1..f2c5f47 100644
--- a/components/camel-cdi/pom.xml
+++ b/components/camel-cdi/pom.xml
@@ -26,7 +26,7 @@
<artifactId>camel-cdi</artifactId>
<packaging>bundle</packaging>
- <name>Camel :: CDI Component</name>
+ <name>Camel :: CDI</name>
<description>Camel Contexts and Dependency Injection Support</description>
<properties>