|
DAM Media Handlers
You are reading the CQ 5.3 version of DAM Media Handlers.
This documentation is also available for the following versions:
AEM 5.6
CQ 5.5
CQ 5.4
CQ5 DAM comes with a set of default workflows and media handlers to
process assets. The workflow defines the general tasks to be executed on the
assets, then delegates the specific tasks to the media handlers, for example
thumbnail generation or metadata extraction.
Media handlers are services inside CQ5 DAM that perform specific
actions on assets. For example, when an MP3 audio file is uploaded into CQ5,
a workflow triggers an MP3 handler that extracts the metadata and generates
a thumbnail. Media handlers are usually used in combination with workflows.
Most common MIME types are supported within CQ5. Specific tasks can be
performed on assets by either extending/creating workflows,
extending/creating media handlers or disabling/enabling media
handlers.
Note
Please refer to the CQ DAM Supported Formats page for a description of all the formats supported by CQ DAM as well as features supported for each format.
The following media handlers are available within CQ5 DAM and handle the most common MIME types:
| Handler name |
Service Name (in the System Console) |
Supported MIME types |
| TextHandler |
com.day.cq.dam.core.impl.handler.TextHandler
|
text/plain |
| PdfHandler |
com.day.cq.dam.handler.standard.pdf.PdfHandler
|
application/pdf
|
| JpegHandler |
com.day.cq.dam.core.impl.handler.JpegHandler
|
image/jpeg |
| Mp3Handler |
com.day.cq.dam.handler.standard.mp3.Mp3Handler
|
audio/mpeg
|
| ZipHandler |
com.day.cq.dam.handler.standard.zip.ZipHandler
|
application/java-archive
application/zip
|
| PictHandler |
com.day.cq.dam.handler.standard.pict.PictHandler
|
image/pict
|
| StandardImageHandler |
com.day.cq.dam.core.impl.handler.StandardImageHandler
|
image/gif
image/png
application/photoshop
image/jpeg
image/tiff
image/x-ms-bmp
image/bmp
|
| GenericAssetHandler |
com.day.cq.dam.core.impl.handler.GenericAssetHandler
|
fallback in case no other handler was found to extract data from an asset |
All the handlers perform the following tasks:
It is possible to view the active media handlers:
-
In your browser, navigate to
http://<host>:<port>/system/console/components.
-
Click the link
com.day.cq.dam.core.impl.store.AssetStoreImpl.
-
A list with all the active media handlers is displayed. For
example:
Using Media Handlers in Workflows to perform tasks on Assets
Media handlers are services that are usually used in combination with workflows.
CQ5 has some default workflows to process assets. To view them, open the Workflow console and click the Models tab: the workflow titles that start with DAM are the assets specific ones.
Existing workflows can be extended and new ones can be created to
process assets according to specific requirements.
By default, when a PDF document is uploaded into the /var/dam/geometrixx/documents folder, the default DAM Asset Synchronization copies the document into the /content/dam/geometrixx/documents folder.
The following example shows how to enhance the DAM Asset Synchronization workflow
so that sub-assets are generated for all assets except PDF documents.
The workflow will look as follows:

-
Create a service (for example
com.day.cq5.myprocess.DoNothingProcess) that
does not affect the asset and install it in CQ5. This service will be
used to bypass the sub-asset creation step.
-
In your browser, open the Workflow
Console (for example:
http://localhost:4502/libs/workflow/content/console.html).
-
Select the Models tab and edit the
DAM Asset Synchronization
workflow.
-
Drag and drop an OR Split below the
Sync asset step.
-
Click the configuration button of the left step of the OR Split
and set the following properties in the right panel:
-
Type: select
Process
-
Description: This process
creates subassets if handler is able to extract
subassets
-
Handler Advance:
true
-
Implementation: select
com.day.cq.dam.core.process.CreateSubAssetsProcess
-
Process Arguments:
/etc/workflow/models/dam/sub_asset_processor
-
Timeout:
Off
-
Timeout Handler:
-
Title: Process
Subassets
-
Click the configuration button of the right step of the OR Split
and set the following properties in the right panel:
-
Type: select
Process
-
Description: This process
does not affect the asset and leads to the next
step
-
Handler Advance:
true
-
Implementation: type the name of the
service here (the service created in step 1; for example:
com.day.cq5.myprocess.DoNothingProcess)
-
Process Arguments:
-
Timeout:
Off
-
Timeout Handler:
-
Title: Do
Nothing
-
Create an ecma-script function that is set to true if the
filename ends with .pdf, to false
otherwise:
-
In CRXDE, create a file under
/etc/workflow/scripts and call it
myPdfCheck.ecma.
-
Copy-paste the following code into it:
function check() {
if (workflowData.getPayloadType() == "JCR_PATH") {
var path = workflowData.getPayload().toString();
var node = jcrSession.getItem(path);
if (node.getPath().indexOf(".pdf") >= 0) {
return true;
} else {
return false;
}
} else {
return false;
}
}
-
Save the file.
-
Create an ecma-script function that is set to true if the
filename does not end with .pdf, to false
otherwise:
-
In CRXDE, create a file under
/etc/workflow/scripts and call it
myNotPdfCheck.ecma.
-
Copy-paste the following code into it:
function check() {
if (workflowData.getPayloadType() == "JCR_PATH") {
var path = workflowData.getPayload().toString();
var node = jcrSession.getItem(path);
if (node.getPath().indexOf(".pdf") >= 0) {
return false;
} else {
return true;
}
} else {
return true;
}
}
-
Save the file.
-
In your browser, set the rule of the Process
Subassets step of the OR Split: type
/etc/workflow/scripts/myPdfCheck.ecma as value
of the Rule.
-
Set the rule of the Do Nothing step of
the OR Split: type
/etc/workflow/scripts/myNotPdfCheck.ecma as value
of the Rule.
-
Save the workflow.
Disabling/Enabling a Media Handler
The media handlers can be disabled or enabled through the Apache
Felix Web Management Console. When the media handler is disabled, its
tasks are not performed on the assets.
To enable/disable a media handler:
-
In your browser, navigate to
http://<host>:<port>/system/console/components.
-
Click the Disable button right beside the
name of the media handler. For example:
com.day.cq.dam.handler.standard.mp3.Mp3Handler.
-
Refresh the page: a Disabled icon is
displayed beside the media handler.
-
To enable the media handler, click the
Enable button beside the name of the media
handler.
Creating a new Media Handler
To support a new media type or to execute specific tasks on an
asset, it is necessary to create a new media handler. This section
describes how to proceed.
Important Classes and Interfaces
The best way to start an implementation is to inherit from a provided abstract implementation that takes care of most things and provides reasonable default behaviour: the com.day.cq.dam.core.AbstractAssetHandler Class.
This class already provides an abstract service descriptor. So if you inherit from this class and use the maven-sling-plugin, make sure that you set the inherit flag to true.
The following methods need to be implemented:
-
extractMetadata(): this method extracts all available metadata.
-
getThumbnailImage(): this method creates a thumbnail image out of the passed asset.
-
getMimeTypes(): this method returns the asset mime type(s).
Here is an example template:
package my.own.stuff;
/**
* @scr.component inherit="true"
* @scr.service
*/
public class MyMediaHandler extends com.day.cq.dam.core.AbstractAssetHandler {
// implement the relevant parts
} The interface and classes include:
com.day.cq.dam.api.handler.AssetHandler Interface This interface describes the service which adds support for specific mime types. Adding a new mime type requires to implement this interface. The interface contains methods for importing and exporting the specific documents, for creating thumbnails and extracting metadata.
com.day.cq.dam.core.AbstractAssetHandler Class This class serves as basis for all other asset handler implementations and provides common used functionality.
com.day.cq.dam.core.AbstractSubAssetHandler Class: This class serves as basis for all other asset handler implementations and provides common used functionality plus common used functionality for subasset extraction
The best way to start an implementation is to inherit from a provided abstract implementation that takes care of most things and provides reasonable default behaviour: the com.day.cq.dam.core.AbstractAssetHandler Class.
This class already provides an abstract service descriptor. So if you inherit from this class and use the maven-sling-plugin, make sure that you set the inherit flag to true.
The following methods need to be implemented:
-
extractMetadata(): this method extracts all available metadata.
-
getThumbnailImage(): this method creates a thumbnail image out of the passed asset.
-
getMimeTypes(): this method returns the asset mime type(s).
Here is an example template:
package my.own.stuff;
/**
* @scr.component inherit="true"
* @scr.service
*/
public class MyMediaHandler extends com.day.cq.dam.core.AbstractAssetHandler {
// implement the relevant parts
} The interface and classes include:
com.day.cq.dam.api.handler.AssetHandler Interface This interface describes the service which adds support for specific mime types. Adding a new mime type requires to implement this interface. The interface contains methods for importing and exporting the specific documents, for creating thumbnails and extracting metadata.
com.day.cq.dam.core.AbstractAssetHandler Class This class serves as basis for all other asset handler implementations and provides common used functionality.
com.day.cq.dam.core.AbstractSubAssetHandler Class: This class serves as basis for all other asset handler implementations and provides common used functionality plus common used functionality for subasset extraction
Example: create a specific Text Handler
In this section, you will create a specific Text Handler that
generates thumbnails with a watermark.
Proceed as follows:
Refer to How to Set Up the Development Environment with Eclipse for installing and setting up
Eclipse with a Maven plugin and for setting up the dependencies that
are needed for the Maven project.
-
In Eclipse, create the myBundle Maven project:
-
In the Menu bar, click File, select
New, then Other...
.
-
In the dialog, expand the Maven
folder, select Maven Project and click
Next.
-
Check the Create a simple project
box and the Use default Workspace
locations box, then click
Next.
-
Define the Maven project:
-
Click Finish.
-
Set the Java Compiler to version 1.5:
-
Right-click the myBundle project,
select Properties.
-
Select Java Compiler and set
following properties to 1.5:
-
Click OK.
-
In the dialog window, click
Yes.
-
Replace the code in the pom.xml file with the following
code:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- ====================================================================== -->
<!-- P A R E N T P R O J E C T D E S C R I P T I O N -->
<!-- ====================================================================== -->
<parent>
<groupId>com.day.cq.dam</groupId>
<artifactId>dam</artifactId>
<version>5.2.14</version>
<relativePath>../parent</relativePath>
</parent>
<!-- ====================================================================== -->
<!-- P R O J E C T D E S C R I P T I O N -->
<!-- ====================================================================== -->
<groupId>com.day.cq5.myhandler</groupId>
<artifactId>myBundle</artifactId>
<name>My CQ5 bundle</name>
<version>0.0.1-SNAPSHOT</version>
<description>This is my CQ5 bundle</description>
<packaging>bundle</packaging>
<!-- ====================================================================== -->
<!-- B U I L D D E F I N I T I O N -->
<!-- ====================================================================== -->
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-scr-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.sling</groupId>
<artifactId>maven-sling-plugin</artifactId>
<configuration>
<slingUrlSuffix>/libs/dam/install/</slingUrlSuffix>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-Category>cq5</Bundle-Category>
<Export-Package>
com.day.cq5.myhandler
</Export-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
<!-- ====================================================================== -->
<!-- D E P E N D E N C I E S -->
<!-- ====================================================================== -->
<dependencies>
<dependency>
<groupId>com.day.cq.dam</groupId>
<artifactId>cq-dam-api</artifactId>
<version>5.2.10</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.day.cq.dam</groupId>
<artifactId>cq-dam-core</artifactId>
<version>5.2.10</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.day.cq</groupId>
<artifactId>cq-commons</artifactId>
</dependency>
<dependency>
<groupId>javax.jcr</groupId>
<artifactId>jcr</artifactId>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.osgi.compendium</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
<groupId>com.day.commons</groupId>
<artifactId>day-commons-gfx</artifactId>
</dependency>
<dependency>
<groupId>com.day.commons</groupId>
<artifactId>day-commons-text</artifactId>
</dependency>
<dependency>
<groupId>com.day.cq.workflow</groupId>
<artifactId>cq-workflow-api</artifactId>
</dependency>
<dependency>
<groupId>com.day.cq.wcm</groupId>
<artifactId>cq-wcm-foundation</artifactId>
<version>5.2.22</version>
</dependency>
</dependencies>
-
Create the package com.day.cq5.myhandler
that will contain the Java classes under
myBundle/src/main/java:
-
Under myBundle, right-click
src/main/java, select
New, then
Package.
-
Name it com.day.cq5.myhandler and
click Finish.
-
Create the Java class MyHandler:
-
In Eclipse, under
myBundle/src/main/java, right-click the
com.day.cq5.myhandler package, select
New, then
Class.
-
In the dialog window, name the Java Class
MyHandler and click
Finish. Eclipse creates and opens the
file MyHandler.java.
-
In MyHandler.java replace the
existing code with the following:
package com.day.cq5.myhandler;
import java.awt.Color;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.day.cq.dam.api.metadata.ExtractedMetadata;
import com.day.cq.dam.core.AbstractAssetHandler;
import com.day.image.Font;
import com.day.image.Layer;
import com.day.cq.wcm.foundation.ImageHelper;
/**
* The <code>MyHandler</code> can extract text files
*
* @scr.component inherit="true" immediate="true" metatype="false"
* @scr.service
*/
public class MyHandler extends AbstractAssetHandler {
/**
* Logger instance for this class.
*/
private static final Logger log = LoggerFactory.getLogger(MyHandler.class);
/**
* Music icon margin
*/
private static final int MARGIN = 10;
/**
* @see com.day.cq.dam.api.handler.AssetHandler#getMimeTypes()
*/
public String[] getMimeTypes() {
return new String[] {"text/plain"};
}
public ExtractedMetadata extractMetadata(Node asset) {
ExtractedMetadata extractedMetadata = new ExtractedMetadata();
InputStream data = getInputStream(asset);
try {
// read text data
InputStreamReader reader = new InputStreamReader(data);
char[] buffer = new char[4096];
String text = "";
while (reader.read(buffer) != -1) {
text += new String(buffer);
}
reader.close();
long wordCount = this.wordCount(text);
extractedMetadata.setProperty("text", text);
extractedMetadata.setMetaDataProperty("Word Count",wordCount);
setMimetype(extractedMetadata, asset);
} catch (Throwable t) {
log.error("handling error: " + t.toString(), t);
} finally {
IOUtils.closeQuietly(data);
}
return extractedMetadata;
}
// ----------------------< helpers >----------------------------------------
protected BufferedImage getThumbnailImage(Node node) {
ExtractedMetadata metadata = extractMetadata(node);
final String text = (String) metadata.getProperty("text");
// create text layer
final Layer layer = new Layer(500, 600, Color.WHITE);
layer.setPaint(Color.black);
Font font = new Font("Arial", 12);
String displayText = this.getDisplayText(text, 600, 12);
if(displayText!=null && displayText.length() > 0) {
// commons-gfx Font class would throw IllegalArgumentException on empty or null text
layer.drawText(10, 10, 500, 600, displayText, font, Font.ALIGN_LEFT, 0, 0);
}
// create watermark and merge with text layer
Layer watermarkLayer;
try {
final Session session = node.getSession();
watermarkLayer = ImageHelper.createLayer(session, "/var/dam/geometrixx/icons/certificate.png");
watermarkLayer.setX(MARGIN);
watermarkLayer.setY(MARGIN);
layer.merge(watermarkLayer);
} catch (RepositoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
layer.crop(new Rectangle(510, 600));
return layer.getImage();
}
// ---------------< private >-----------------------------------------------
/**
* This method cuts lines if the text file is too long..
*
* @param text
* text to check
* @param height
* text box height (px)
* @param fontheight
* font height (px)
* @return the text which will fit into the box
*/
private String getDisplayText(String text, int height, int fontheight) {
String trimmedText = text.trim();
int numOfLines = height / fontheight;
String lines[] = trimmedText.split("\n");
if (lines.length <= numOfLines) {
return trimmedText;
} else {
String cuttetText = "";
for (int i = 0; i < numOfLines; i++) {
cuttetText += lines[i] + "\n";
}
return cuttetText;
}
}
/**
* This method counts the number of words in a string
*
* @param text the String whose words would like to be counted
* @return the number of words in the string
*/
private long wordCount(String text) {
// We need to keep track of the last character, if we have two white spaces in a row we dont want to double count
// The starting of the document is always a whitespace
boolean prevWhiteSpace = true;
boolean currentWhiteSpace = true;
char c;
long numwords = 0;
int j = text.length();
int i = 0;
while (i < j) {
c = text.charAt(i++);
if (c == 0) {
break;
}
currentWhiteSpace = Character.isWhitespace(c);
if (currentWhiteSpace && !prevWhiteSpace) {
numwords++;
}
prevWhiteSpace = currentWhiteSpace;
}
// If we do not end with a white space then we need to add one extra word
if (!currentWhiteSpace) {
numwords++;
}
return numwords;
}
}
-
Save the changes.
-
Compile the Java class and create the bundle:
-
Right-click the myBundle project,
select Run As, then Maven
Install.
-
The bundle
myBundle-0.0.1-SNAPSHOT.jar (containing the
compiled class) is created under
myBundle/target.
-
In CRX Explorer, create a new node under
/apps/myApp. Name =
install, Type =
nt:folder.
-
Copy the bundle
myBundle-0.0.1-SNAPSHOT.jar and store it under
/apps/myApp/install (for example with
WebDAV).
The new text handler is now active in CQ5.
-
In your browser, open the Apache Felix Web Management Console. Select the Components tab and disable the default text handler
com.day.cq.dam.core.impl.handler.TextHandler.
From now on, whenever you upload a txt file into CQ5 under the
/var/dam/documents folder, the file is copied into
/content/dam/documents, its metadata are extracted
and two thumbnails with a watermark are generated.
Command Line Based Media Handler
CQ enables you to run any command-line tool within a workflow to convert assets (like for example ImageMagick) and to add the new rendition to the asset. You only need to install the command-line tool on the disk hosting the CQ server and to add and configure a process step to the workflow. The invoked process, called CommandLineProcess, also enables to filter according to specific mime-types and to create multiple thumbnails based on the new rendition.
The following conversions can be automatically run and stored within DAM:
The CommandLineProcess process sequently performs the following operations:
- Filters the file according to specific mime-types, if specified.
- Creates a temporary directory on the disk hosting the CQ server.
- Streams the original file to the temporary directory.
- Executes the command defined by the arguments of the step. The command is being executed within the temporary directory with the permissions of the user running CQ.
- Streams the result back into the rendition folder of the CQ server.
- Deletes the temporary directory.
- Creates thumbnails based on those renditions, if specified. The number and the dimensions of the thumbnails are defined by the arguments of the step.
An Example Using ImageMagick
The following example shows you how to set up the command line process step so that every time an asset with the mime-type gif or tiff is added to /var/dam on the CQ server, a flipped image of the original is created together with three additional thumbnails (140x100, 48x48 and 10x250).
To do this, you will use ImageMagick. ImageMagick is a free software suite to create, edit, and compose bitmap images and is typically used from the command line.
First install ImageMagick on the disk hosting the CQ server:
- Install ImageMagick: please refer to the ImageMagick documentation.
- Set up the tool so you can run convert on the command line.
- To see if the tool is installed properly, run the following command on the command line:
convert -h
It displays a help screen with all the possible options of the convert tool.
- To see if the tool runs properly, add an .jpg image to the working directory and run the following command on the command line:
convert <image-name>.jpg -flip <image-name>-flipped.jpg
A flipped image is added to the directory.
Then add the command line process step to the DAM Update Asset workflow:
- Open the CQ5 Workflow console; for example at http://localhost:4502/libs/cq/workflow/content/console.html.
- In the Models tab, edit the DAM Update Asset model.
- Change the settings of the Create web enabled rendition step as follows:
Implementation: com.day.cq.dam.core.process.CommandLineProcess
Process Arguments: mime:image/gif,mime:image/tiff,tn:140:100,tn:48:48,tn:10:250,cmd:convert ${directory}/${filename} -flip ${directory}/${basename}.flipped.jpg
- Save the workflow.
Lastly test the modified workflow by adding a new asset to /var/dam:
- In the file system, get a .tiff image of your choice. Rename it myImage.tiff and copy it to /var/dam; for example by using WebDAV.
- Go to the CQ5 DAM console; for example at http://localhost:4502/libs/wcm/core/content/damadmin.html.
- Open the asset myImage.tiff and verify that the flipped image and the three thumbnails have been created.
Configuring the CommandLineProcess Process Step
This section describes how to set the Process Arguments of the CommandLineProcess.
The values of the Process Arguments must be separated by a comma and must not start with a whitespace.
| Argument-Format |
Description
|
| mime:<mime-type> |
Optional argument. The process is applied if the asset has the same mime-type as the one of the argument.
Several mime-types can be defined.
|
| tn:<width>:<heigth> |
Optional argument. The process creates a thumbnail with the dimensions defined in the argument.
Several thumbnails can be defined.
|
cmd: <command>
|
Defines the command that will be executed. The syntax depends on the command line tool.
Only one command can be defined.
The following variables can be used to create the command:
${filename}: name of the input file, e.g. original.jpg
${file}: full path name of the input file, e.g. /tmp/cqdam0816.tmp/original.jpg
${directory}: directory of the input file, e.g. /tmp/cqdam0816.tmp.
${basename}: name of the input file without its extension, e.g. original
${extension}: extension of the input file, e.g. jpg
|
For example, if ImageMagick is installed on the disk hosting the CQ server and if you create a process step using CommandLineProcess as Implementation and the following values as Process Arguments:
mime:image/gif,mime:image/tiff,tn:140:100,tn:48:48,tn:10:250,cmd:convert ${directory}/${filename} -flip ${directory}/${basename}.flipped.jpg
then, when the workflow runs, the step only applies to assets that have image/gif or mime:image/tiff as mime-types, it creates a flipped image of the original, converts it into .jpg and creates three thumbnails that have the dimensions: 140x100, 48x48 and 10x250.
Use the following Process Arguments to create the three standard thumbnails using ImageMagick:
mime:image/tiff,mime:image/png,mime:image/bmp,mime:image/gif,mime:image/jpeg,cmd:convert ${filename} -define jpeg:size=319x319 -thumbnail "319x319>" -background transparent -gravity center -extent 319x319 -write png:cq5dam.thumbnail.319.319.png -thumbnail "140x100>" -background transparent -gravity center -extent 140x100 -write cq5dam.thumbnail.140.100.png -thumbnail "48x48>" -background transparent -gravity center -extent 48x48 cq5dam.thumbnail.48.48.png
Use the following Process Arguments to create the web-enabled rendition using ImageMagick:
mime:image/tiff,mime:image/png,mime:image/bmp,mime:image/gif,mime:image/jpeg,cmd:convert ${filename} -define jpeg:size=1280x1280 -thumbnail "1280x1280>" cq5dam.web.1280.1280.jpeg
Note
The CommandLineProcess step only applies to Assets (nodes of type dam:Asset) or descendants of an Asset.
|
|
Can you give us a hint as to how to go about disabling the existing handler alone?. It seems to be bundled with quite a few other services that we would like to keep.
Also, is there a reason why we ought to use Eclipse?. Is CRXDE adequate?
CRXDE / CRXDE Lite can be used as well.