Class Summary |
Aggregate |
Use the newAggregate static factory method(s), not the Aggregate
constructor, to construct instances of this class. |
AggToAppData |
Use the newAggToAppData static factory method(s), not the
AggToAppData constructor, to construct instances of this
class. |
AggToContentItem |
Use the newAggToContentItem static factory method(s), not
the AggToContentItem constructor, to construct instances
of this class. |
ApplicationData |
Handles the file system information for the content data. |
ChecksumHelper |
|
ContentHelper |
Used by clients to access the ContentService and defines some client
side helper methods to manipulate content, status objects, and initiate
uploads and downloads. |
ContentHtml |
|
ContentHtmlUtils |
|
ContentHttp |
This does handling of the HTTP streams and makes appropriate calls to
do persisting and querying of the database. |
ContentHTTPStream |
Deprecated. |
ContentHTTPStreamHelper |
Deprecated. |
ContentItem |
This is the abstract class that represents a single piece of content. |
ContentProcessor |
|
ContentRoleType |
This class is an enumeration of categorites of Content. |
ContentServerHelper |
Server side ContentServiceSvr access. |
ContentServiceEvent |
Events dispatched by the ContentService. |
ContentServiceFwd |
The ContentManager interface identifies the set of methods that clients
use to manage classes that implement the ContentHolder interface. |
DataFormat |
Populated with all the allowable mime-types and displayed FormatNames
in the system. |
DataFormatIconDelegate |
Supported API: false
Extendable: false |
DataFormatIdentity |
Identification object for a DataFormat This is an implementation object
that defines the uniqueness constraint for a DataFormat. |
DataFormatKey |
Defines the class which performs the uniqueness constraint for a DataFormat. |
DataFormatReference |
DataFormatReference is what is stored with a ContentItem of a FormatContentHolder
to indicate how the item should be displayed to the user as well as how
ApplicationData objects should be downloaded (i.e. |
DataFormatReferenceSearch |
Search for a reference to the DataFormat listed. |
DataFormatUtil |
USAGE:
java wt.content.DataFormatUtil
The DataFormatUtil tool allows the addition and change of file formats to the Windchill system.
It also allows for the listing of all the data format objects in the system. |
FormatIconDelegate |
Provides icons for ContentItems, Documents (FormatContentHolder), and
DataFormat objects
Supported API: false
Extendable: false |
HolderToContent |
Use the newHolderToContent static factory method(s), not
the HolderToContent constructor, to construct instances
of this class. |
HttpContentOperation |
Deprecated. |
HttpOperationItem |
Deprecated. |
HttpOperationStatus |
Used to indicate status of an upload or a download. |
HttpOperationType |
This enumeration is used in the HttpContentOperation object to indicate
that this is either an upload or a download. |
LatestContentProcessor |
This class provides object properties template processors. |
LoadDataFormat |
|
ObjectContentProcessor |
Deprecated. |
OpLink |
Use the newOpLink static factory method(s), not the OpLink
constructor, to construct instances of this class. |
PrimaryContentDataDelegate |
|
StandardContentService |
This is a Windchill standard manager for Content services. |
StandardContentService.WaitNotifier |
Each of the holder in the holders set will have a HashSet of AppDatas
corresponds to it, the HashSet will also be used to store strings (file names)
in addition to AppDatas object type. |
StreamData |
This is where the class where the bulk data is actually stored. |
URLData |
This allows a URL link to be attached to a ContentHolder
|
content package — Content Handling Service
The content package allows
content — files, URL links, and aggregates (multiple pieces of content that
behave as a single file — to be associated with business objects. These
business objects are referred to as ContentHolders. It appears to users that
content is contained in the business objects. The content itself is treated
like any other attribute of the object and requires read and/or write access on
the ContentHolder.
Design Overview
The figure below is a conceptual representation of
ContentHolders and how they are represented to client developers.

ContentHolders
Each ContentHolder can be thought of as containing an
undetermined number of ContentItems. Each ContentItem can be an URLData (a
link) instance, an ApplicationData (a file) instance, or an Aggregate (a group
of content treated like a single file) instance. A ContentItem references a
format (basically the file’s MIME type; see the DataFormat class that follows)
and a WTPrincipalReference. This contains the user who created the ContentItem.
Two primary interfaces can be used when creating your
own ContentHolder classes: the ContentHolder interface and the
FormatContentHolder interface.
The ContentHolder interface is used for classes like
change request (see wt.change2.WTChangeRequest2), where content is used more as
an attachment.
The FormatContentHolder interface is used for classes
like document (see wt.doc.WTDocument), where you want to associate a primary
format with the document. This format is set automatically when using the
ContentService. For example, a document having Microsoft Word file attached as
primary content will get a format of Microsoft Word.
The ContentRoleType is an enumerated type that exists
primarily for customization. It is not used by the ContentService to perform
any particular action or behavior except in the case of FormatContentHolders.
It is used when one piece of content is to be stored as the main piece of content
for the document, as opposed to a related attachment. Primary content is, for
example, downloaded on a checkout of a document. Its role should be set as
PRIMARY before it is stored. The code to set the primary content is as follows:
ContentItem item = . . .
item.setRole(
ContentRoleType.PRIMARY );
The ContentRoleType can also be used to specify
particular ContentItems as renditions, an attached drawing, and so forth. The
default enumeration can be updated in wt/content/ContentRoleTypeRB.java.
However, for proper execution of the system, do not remove the existing values
from this resource bundle.
Note that the aggregate pieces of content are not
currently supported for customization.
The following figure is a conceptual representation of
the DataFormat class.

DataFormat Class
The DataFormat class is an Administrative class that
is used to associate a primary format with FormatContentHolders and
ContentItems. Instances of DataFormat class should have unique formatName, can be created only by an
administrator, and can never be deleted. Note that formats on files are set
based on file extension and/or mime type.

Content Services
The ContentService is available both on the client and
server side. The ContentServiceSvr is available only on the server side. The
service methods are to be referenced through the corresponding helper class.
For further information, see the javadoc for ContentService.
Working with ContentItems
Querying
The method call to get the secondary content
associated with a ContentHolder is as follows:
ContentHolder holder;
holder =
ContentHelper.service.getContents( holder );
Vector contents =
ContentHelper.getContentList( holder );
This vector contains all
the secondary ContentItems associated with the passed ContentHolder.
The method call to get the primary content associated
with a FormatContentHolder is as follows:
ContentHolder holder;
holder =
ContentHelper.service.getContents( holder );
ContentItem item =
ContentHelper.getPrimary( holder );
Creating, Updating, and Removing
PTC recommends that you set up a signed applet and
post to the content service via HTTP. The method call to set up the URL to post
to the content service is as follows:
ContentHolder holder = . . .
URL postURL =
ContentHelper.getUploadURL( holder );
To receive a stream from the ContentService, use the
following:
ContentHolder holder = . . .
URL postURL =
ContentHelper.getDownloadURL( holder );
When posting to the ContentService, the data must be
posted in a particular format. An outline of the format as is follows:
attribute name 1 attribute value 1
attribute name 2 attribute value 2
. . .
attribute name x attribute value x
content_description value <file path here>
attribute name 1 attribute value 1
attribute name 2 attribute value 2
. . .
attribute name x attribute value x
content_description value <file path here>
. . . <as many ContentItems as desired>
EndContent null <You
must mark the end with this>
The content_description line should appear as follows
for a new file:
newFile c\:path\uploaded_file.xxx file stream . . .
The content_description line should appear as follows
for an ApplicationData that already exists in the ContentHolder (that is,
replace):
fileoid c:\path\uploaded_file.xxx file stream . . .
The value for fileoid can be generated using the
following method call:
ApplicationData
applicationDataObj = . . .
String oidstr = PersistenceHelper.getObjectIdentifier(applicationDataObj
).getStringValue( );
The content_description line should appear as follows
for a new URL:
newURLLink http://xxx.yyy.zzz
The content_description line should appear as follows
for an existing URL, generating the urloid, like the one for the preceding
files:
urloid http://xxx.yyy.zzz
The ContentService currently handles the following
attributes:
roleName (see
wt.content.ContentRoleType)
remove
description
The attributes can be passed in any order, as long as
the preceding content_description line is passed last for each object being
worked on.
Business Rules
The read and modification
of content is based on the access rules of the ContentHolder.
Event Processing
At this time, the
ContentService does not broadcast any events.