butlermh    2003/02/26 07:17:19

  Modified:    src/documentation/xdocs/developing deli.xml
  Log:
  Made some changes to reflect updates to DELI, added code examples
  
  Revision  Changes    Path
  1.10      +133 -27   xml-cocoon2/src/documentation/xdocs/developing/deli.xml
  
  Index: deli.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/documentation/xdocs/developing/deli.xml,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- deli.xml  13 Feb 2003 19:08:36 -0000      1.9
  +++ deli.xml  26 Feb 2003 15:17:18 -0000      1.10
  @@ -228,19 +228,20 @@
                                <source><![CDATA[
   <?xml version="1.0"?>
   <deli>
  -  <legacyDeviceFile>resources/deli/config/legacyDevice.xml</legacyDeviceFile>
  -  <debug>false</debug>
  -  <printDefaults>false</printDefaults>
  -  <printProfileBeforeMerge>false</printProfileBeforeMerge>
  -  <schemaVocabularyFile 
namespace="http://www.wapforum.org/UAPROF/ccppschema-20000405#";>
  -     resources/deli/config/vocab/ccppschema-20000405.rdfs
  -  </schemaVocabularyFile>
  -  <schemaVocabularyFile 
namespace="http://www.wapforum.org/profiles/UAPROF/ccppschema-20010330#";>
  -     resources/deli/config/vocab/ccppschema-20010330.rdfs
  -  </schemaVocabularyFile>
  -  <vocabularyFile>
  -     resources/deli/config/vocab/uaprof_vocab_30apr2001.xml
  -  </vocabularyFile>
  + <localProfilesFile>WEB-INF/deli/config/localProfiles.xml</localProfilesFile>
  + <localProfilesPath>WEB-INF/deli/legacyProfiles</localProfilesPath>
  + <useLocalProfilesIfNoCCPP>true</useLocalProfilesIfNoCCPP>
  + <useLocalProfilesInAdditionToCCPP>false</useLocalProfilesInAdditionToCCPP>
  + <debug>false</debug>
  + <printDefaults>true</printDefaults>
  + <printProfileBeforeMerge>false</printProfileBeforeMerge>
  + <processUndefinedAttributes>true</processUndefinedAttributes>
  + <useCapabilityClasses>false</useCapabilityClasses> 
  + <capabilityClassFile>WEB-INF/deli/config/capClass.xml</capabilityClassFile> 
  + <namespaceConfigFile>WEB-INF/deli/config/namespaceConfig.xml</namespaceConfigFile>
  + <!-- note that the default uri is also hardcoded -->
  + <rdfsUri>http://www.w3.org/1999/PR-rdf-schema-19990303#</rdfsUri>
  + <rdfsUri>http://www.w3.org/TR/PR-rdf-schema#</rdfsUri>
   </deli>
   ]]></source>
                                <p>This file can contain a number of configuration 
directives described in 
  @@ -315,12 +316,12 @@
                                                        <th>Description</th>
                                                </tr>
                                                <tr>
  -                                                     <td>supportLegacyDevices</td>
  +                                                     
<td>useLocalProfilesIfNoCCPP</td>
                                                        <td>true</td>
  -                                                     <td>Is the legacy device 
database turned on?</td>
  +                                                     <td>Use the legacy device 
database if devices send no CC/PP information?</td>
                                                </tr>
                                                <tr>
  -                                                     <td>legacyDeviceFile</td>
  +                                                     <td>localProfilesFile</td>
                                                        <td>legacyDevice.xml</td>
                                                        <td>The file containing the 
legacy device database.</td>
                                                </tr>
  @@ -400,20 +401,19 @@
   By default this is done in the <code>legacyDevice.xml</code> file which 
   has the following format:</p>
                                <source><![CDATA[
  -<?xml version="1.0"?>
  +<?xml version="1.0" encoding="UTF-8"?>
   <devices>
  -  <legacyDevice>
  -    <useragentstring>MSIE</useragentstring>
  -    <profileref>http://www.profiles.org/legacyProfiles/msie.rdf</profileref>
  -  </legacyDevice>
  -  <legacyDevice>
  -    <useragentstring>mozilla</useragentstring>
  -    <profileref>resources/deli/legacyProfiles/mozSample.rdf</profileref>
  -  </legacyDevice>
  +<!-- Alcatel -->
  +  <device>
  +    <ua value="Alcatel-BF4/2.0" profile="Alcatel_OT512.rdf"/>
  +  </device>
  +  <device>
  +    <ua value="Alcatel-BE4/1.0" profile="Alcatel_OT301.rdf"/>
  +  </device>
   </devices>
   ]]></source>
  -                             <p>Where <code>useragentstring</code> is a device 
unique string found in 
  -the user-agent string of the device and <code>profileref</code> is either a local 
file or a URL
  +                             <p>Where <code>vale</code> is a device unique string 
found in 
  +the user-agent string of the device and <code>profile</code> is either a local file 
or a URL
   for the appropriate legacy profile. </p>
                        </s2>
                </s1>
  @@ -483,6 +483,112 @@
   </xsl:stylesheet>
   
   ]]></source>
  +             </s1>
  +             <s1 title="Incorporating DELI into other Cocoon components">
  +<p>If you want to use DELI in other Cocoon components, DELI needs to go through an 
  +initialization phase in order to read in configuration files. This occurs in 
  +<code>initialization()</code> in DeliImpl.java in the Cocoon DELI component in this 
line:</p>
  +<source>
  +Workspace.getInstance().configure(this.servletContext, this.deliConfig);
  +</source>
  +<p>i.e. it constructs a DELI workspace object. In addition, DeliImpl.java has a 
number 
  +of methods to get profile information, but the one which is of most use is 
<code>getProfile()</code>. 
  +For examples of how to call DELI, see DeliTransformer.java - here are the relevant 
pieces.</p>
  +
  +<p>First import DELI:</p>
  +<source>
  +import org.apache.cocoon.components.deli.Deli;
  +</source>
  +<p>Then in compose(), initialize DELI:</p>
  +<source>
  +if (this.manager.hasComponent(Deli.ROLE)) {
  + if (this.getLogger().isDebugEnabled()) {
  +     getLogger().debug("Looking up " + Deli.ROLE);
  +}
  +this.deli = (Deli) this.manager.lookup(Deli.ROLE);
  +} else {
  +  if (this.getLogger().isDebugEnabled()) {
  +    getLogger().debug("Deli is not available");
  +}
  +}
  +</source>
  +<p> Then in getLogicSheetParameters, call DELI to get 
  +a profile and convert it into a DOM tree to give to XSLT as a parameter:</p>
  +<source>
  +if (this.deli != null &#38;&#38; this._useDeli) {
  +  try {
  +   Request request = ObjectModelHelper.getRequest(objectModel);
  +   if (map == null) {
  +    map = new HashMap();
  +  }
  +
  +  org.w3c.dom.Document deliCapabilities = this.deli.getUACapabilities(request);
  +  map.put("deli-capabilities", deliCapabilities);
  +  } catch (Exception e) {
  +    getLogger().error("Error setting DELI info", e);
  +  }
  +}
  +</source>
  +<p>
  +However, you don't want to pipe DELI to XSLT so here is some more 
  +example code showing how to use DELI in Cocoon if you want to use the 
  +DELI API directly:</p>
  +
  +<p>Import the deli component and the DELI API:</p>
  +<source>
  +import org.apache.cocoon.components.deli.Deli;
  +
  +import com.hp.hpl.deli.Profile;
  +import com.hp.hpl.deli.ProfileAttribute;
  +</source>
  +
  +<p>Add code to initialize the compose method as before</p>
  +<source>
  +  public void compose(ComponentManager manager) throws ComponentException
  +  {
  +    try
  +    {
  +      deli = (Deli)manager.lookup(Deli.ROLE);
  +    } 
  +    catch(ComponentException ce)
  +    {
  +      logger.log(Level.ERROR, "Cannot get ref to Deli", ce);
  +      ce.printStackTrace();
  +    }
  +  }
  +</source>
  +<p>Some example code that shows how to extract WmlDeckSize from a 
  +DELI profile</p>
  +<source>
  +try
  +{
  + Profile theProfile = deli.getProfile(request);
  + if(theProfile != null)
  + {
  +   ProfileAttribute attrib = theProfile.getAttribute("WmlDeckSize");
  +   if(attrib != null)
  +   {
  +      Vector temp = (Vector)attrib.get();
  +      if(temp != null)
  +      {
  +          deckSizeString = temp.get(0).toString();
  +          System.out.println("Determined WmlDeckSize from DELI: " + deckSizeString);
  +      }
  +   }
  + }
  + if(deckSizeString == null)
  + {
  +    deckSizeString = "1100";
  +    System.out.println("Using fallback WmlDeckSize of " + deckSizeString);
  + }
  +}
  +catch(Exception ex)
  +{
  +    System.out.println(ex.toString());
  +    ex.printStackTrace();
  +}
  +}
  +</source>
                </s1>
                <s1 title="More information ?">
                        <p>For more information on the DELI library please refer to 
the 
  
  
  

Reply via email to