[
http://issues.apache.org/jira/browse/JCR-473?page=comments#action_12419056 ]
Jukka Zitting commented on JCR-473:
-----------------------------------
+1, I especially like the approach of separating responsibilities from QName
and Path.
Would it make sense to go even further along this way, like this:
public class QName implements ... {
public String getNamespaceURI();
public String getLocalName();
// and the Object and Comparable overrides
}
public class Path implements ... { ... }
public interface NamespaceResolver {
String getURI(String prefix) throws NamespaceException;
String getPrefix(String uri) throws NamespaceException;
}
public interface QNameResolver {
QName getQName(String jcrName) throws NameException;
String getJCRName(String qName) throws NameException;
}
public interface PathResolver {
Path getPath(String jcrPath) throws PathException;
String getJCRPath(Path path) throws PathException;
}1
This separation of concerns would for example make it possible to implement
QName or Path caches as independent and easily composable classes.
> Some enhancements to jackrabbit commons
> ---------------------------------------
>
> Key: JCR-473
> URL: http://issues.apache.org/jira/browse/JCR-473
> Project: Jackrabbit
> Type: Improvement
> Versions: 1.0
> Reporter: angela
> Assignee: angela
> Attachments: JCR-473_rev_417443.patch
>
> I would like to suggest a couple of enhancements to the commons module.
> The patch was created against rev. 417443 and the tests did not reveal any
> problems.
> Summary of suggestion modifications:
> QName
> -------------------------------------------------------------------------------------------------------------------------
> - reduce QName to its core functionality and put conversion from and to JCR
> name to
> a separate class 'NameFormat'
> - in order not to break existing code, all methods that deal with the
> conversion in QName
> are marked deprecated.
> - add constant for the name of the root node.
> Path
> -------------------------------------------------------------------------------------------------------------------------
> - reduce Path to its core functionality and put conversion from and to JCR
> path to
> a separate class 'PathFormat'
> - in order not to break existing code, all methods that deal with the
> conversion in Path
> are marked deprecated.
> - introduce new constants for UNDEFINED_INDEX (0) and DEFAULT_INDEX (1), that
> are currently hardcoded throughout the jackrabbit project.
> - new method Path.getElement(int) [PathElement]
> - make PathElement constants public (used by PathFormat)
> Path.PathBuilder
> -------------------------------------------------------------------------------------------------------------------------
> - additional constructor PathBuilder(Path)
> Path.PathElement
> -------------------------------------------------------------------------------------------------------------------------
> - add PathElement.getNormalizedIndex() that always asserts a 1-based index.
> - change subclasses to be private (no usage within the jackrabbit, except
> inside Path).
> PathMap
> -------------------------------------------------------------------------------------------------------------------------
> - move o.a.j.core.PathMap to o.a.j.util.PathMap in order to make it
> available in the
> commons module.
> NamespaceResolver
> -------------------------------------------------------------------------------------------------------------------------
> - add methods for resolution of paths:
> > getQPath(String jcrPath) [Path]
> > getJCRPath(Path qPath) [String]
> NamespaceListener
> -------------------------------------------------------------------------------------------------------------------------
> - add method 'namespaceRemove(String)'
> ValueHelper
> -------------------------------------------------------------------------------------------------------------------------
> currently JCR value objects are 'manually' created in the ValueHelper
> despite the
> fact, that JSR170 defines a ValueFactory interface. Consequently the
> ValueHelper
> present in the commons module can only be used by implementations that use
> the same value implementations.
> - add new helper methods that take a ValueFactory as argument.
> - in order not to break existing code the original methods are marked
> deprecated and
> may be removed at a later time.
> consequently:
> - modify signature of InternalValue.create that include a value conversion
> to take a
> ValueFactory param and adjust all usages inside the core package.
> ValueFactoryImpl
> -------------------------------------------------------------------------------------------------------------------------
> - createValue(String, int ): used to call the conversion on ValueHelper. with
> the
> changes suggested to ValueHelper, the code must be changed in order to
> created instances of the Value implementations within the factory.
> - together with the modification to ValueHelper, stefan suggested to replace
> the public
> constructor with a static 'getInstance' method. All usages within
> jackrabbit.core, were
> modified accordingly.
> Text
> -------------------------------------------------------------------------------------------------------------------------
> - add getName(String, boolean) where the boolean flag indicates whether a
> trailing slash
> should be ignored.
> - add getRelativeParent(String, int, boolean) where the boolean flag
> indicates whether a
> trailing slash should be ignored.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira