Skip to main content
Jump to: navigation, search

Difference between revisions of "Org.eclipse.higgins.idasclient.cpp.core"

(Introduction)
 
(8 intermediate revisions by the same user not shown)
Line 12: Line 12:
 
The following is not currently support:
 
The following is not currently support:
 
* Synchronization between a local and remote IdAS Context.
 
* Synchronization between a local and remote IdAS Context.
* Multiple values for an IdAS [[Attribute]]
 
* Complex values for an IdAS [[Attribute]]
 
 
* Several advanced IdAS features such as filters, models, transactions
 
* Several advanced IdAS features such as filters, models, transactions
 
* Secure storage of local Context data
 
* Secure storage of local Context data
Line 23: Line 21:
  
 
==Developer Perspective==
 
==Developer Perspective==
 +
 +
===API===
 +
 +
The API of this component is mostly the same as the Java [[IdAS API]], but for convenience here is a summary of the most important methods:
 +
 +
'''idasclient'''
 +
<pre>
 +
IF_ContextUdiMetadata * idasclientResolveContextMetadata(const wchar_t * contextUdi);
 +
IF_EntityUdiMetadata * idasclientResolveEntityMetadata(const wchar_t * entityUdi);
 +
IF_AttributeUdiMetadata * idasclientResolveAttributeMetadata(const wchar_t * attributeUdi);
 +
 +
IF_IdasContext * idasclientResolveContext(const wchar_t * contextUdi, const wchar_t * authNMaterialsType, const wchar_t * authNMaterials);
 +
IF_IdasEntity * idasclientResolveEntity(const wchar_t * entityUdi, const wchar_t * authNMaterialsType, const wchar_t * authNMaterials);
 +
IF_IdasAttribute * idasclientResolveAttribute(const wchar_t * attributeUdi, const wchar_t * authNMaterialsType, const wchar_t * authNMaterials);
 +
</pre>
 +
 +
'''IF_IdasContext'''
 +
<pre>
 +
void open(void * authNMaterials);
 +
std::list<IF_IdasEntity *> getEntities();
 +
IF_IdasEntity * getEntity(const wchar_t * entityID);
 +
IF_IdasEntity * addEntity(const wchar_t * entityType, const wchar_t * entityID);
 +
</pre>
 +
 +
'''IF_IdasEntity'''
 +
<pre>
 +
IF_IdasContext * getContext();
 +
const wchar_t * getEntityID();
 +
const wchar_t * getEntityType();
 +
void remove();
 +
std::list<IF_IdasAttribute *> getAttributes();
 +
IF_IdasAttribute * getAttribute(const wchar_t * attributeID);
 +
IF_IdasAttribute * addAttribute(const wchar_t * attributeID);
 +
</pre>
 +
 +
'''IF_IdasAttribute'''
 +
<pre>
 +
IF_IdasEntity * getEntity();
 +
const wchar_t * getType();
 +
std::list<IF_IdasAttributeValue *> getValues();
 +
IF_IdasAttributeValue * addSimpleValue(const wchar_t * dataType, const wchar_t * data);
 +
</pre>
 +
 +
'''IF_IdasAttributeValue'''
 +
<pre>
 +
IF_IdasAttribute * getAttribute();
 +
void remove();
 +
</pre>
 +
 +
'''IF_IdasSimpleAttributeValue'''
 +
<pre>
 +
void remove();
 +
const wchar_t * getData();
 +
void setData(const wchar_t * data);
 +
</pre>
  
 
===Sample Code===
 
===Sample Code===
Line 64: Line 117:
 
}
 
}
 
</pre>
 
</pre>
 +
 +
===UDIs===
 +
 +
This section describes how [[UDI]]s are handled by this component.
 +
 +
1.A. '''local://ContextID#EntityID'''
 +
--> The IdAS Client uses a local XDI file which is the same for all users. It is included with the installation and can not be modified.
 +
 +
1.B. '''local://alice@ContextID#EntityID'''
 +
--> The IdAS Client uses a local XDI file which is specific to this user ("alice"). It can be modified by the client.
 +
 +
2.A. '''sync://ContextID#EntityID'''
 +
--> The IdAS Client uses a local XDI file which is the same for all users and gets synchronized with the backend. It can only be modified by the backend.
 +
 +
2.B. '''sync://alice@ContextID#EntityID'''
 +
--> The IdAS Client uses a local XDI file which is specific to this user ("alice") and gets synchronized with the backend. It can be modified both by the client and backend.
 +
--> There can be additional, globally resolvable UDIs that point to the same Context/Entity in the backend, e.g. http://service.azigo.net/contexts/alice/ContextID#EntityID
 +
 +
3. Anything else (e.g. http URI, XRI, Gmail address, inline XRDS)
 +
--> The IdAS Client resolves and opens the Context normally via the [[Org.eclipse.higgins.idas.proxy|IdAS Proxy]].
  
 
===Building===
 
===Building===
Line 78: Line 151:
 
|}
 
|}
  
The shared library can be built we the tools "cmake", "nmake" and MS Visual C++.
+
The shared library can be built with the tools "cmake", "nmake" and MS Visual C++.
  
 
== Links ==
 
== Links ==

Latest revision as of 19:39, 6 December 2009

{{#eclipseproject:technology.higgins|eclipse_custom_style.css}}

Higgins logo 76Wx100H.jpg

Introduction

The IdAS Client C++ component provides a subset of the functionalities of the following Java components:

In short, the IdAS Client C++ component makes it possible to resolve UDIs and to perform IdAS operations, which can be either forwarded to a remote IdAS Proxy and Attribute Service or applied to a local Context file in XDI format. In both cases it relies on the Org.eclipse.higgins.xdi.cpp.core C++ component.

The following is not currently support:

  • Synchronization between a local and remote IdAS Context.
  • Several advanced IdAS features such as filters, models, transactions
  • Secure storage of local Context data
  • Multithreading

End-User Perspective

IdAS Client C++ is a component for use by other components and applications. It is not used by end-users directly.

Developer Perspective

API

The API of this component is mostly the same as the Java IdAS API, but for convenience here is a summary of the most important methods:

idasclient

 IF_ContextUdiMetadata * idasclientResolveContextMetadata(const wchar_t * contextUdi);
 IF_EntityUdiMetadata * idasclientResolveEntityMetadata(const wchar_t * entityUdi);
 IF_AttributeUdiMetadata * idasclientResolveAttributeMetadata(const wchar_t * attributeUdi);

 IF_IdasContext * idasclientResolveContext(const wchar_t * contextUdi, const wchar_t * authNMaterialsType, const wchar_t * authNMaterials);
 IF_IdasEntity * idasclientResolveEntity(const wchar_t * entityUdi, const wchar_t * authNMaterialsType, const wchar_t * authNMaterials);
 IF_IdasAttribute * idasclientResolveAttribute(const wchar_t * attributeUdi, const wchar_t * authNMaterialsType, const wchar_t * authNMaterials);

IF_IdasContext

void open(void * authNMaterials);
std::list<IF_IdasEntity *> getEntities();
IF_IdasEntity * getEntity(const wchar_t * entityID);
IF_IdasEntity * addEntity(const wchar_t * entityType, const wchar_t * entityID);

IF_IdasEntity

IF_IdasContext * getContext();
const wchar_t * getEntityID();
const wchar_t * getEntityType();
void remove();
std::list<IF_IdasAttribute *> getAttributes();
IF_IdasAttribute * getAttribute(const wchar_t * attributeID);
IF_IdasAttribute * addAttribute(const wchar_t * attributeID);

IF_IdasAttribute

IF_IdasEntity * getEntity();
const wchar_t * getType();
std::list<IF_IdasAttributeValue *> getValues();
IF_IdasAttributeValue * addSimpleValue(const wchar_t * dataType, const wchar_t * data);

IF_IdasAttributeValue

IF_IdasAttribute * getAttribute();
void remove();

IF_IdasSimpleAttributeValue

void remove();
const wchar_t * getData();
void setData(const wchar_t * data);

Sample Code

The following sample code shows how to open a local context and read a few Entities, Attributes and values:

int _tmain(int argc, _TCHAR* argv[]) {

	IF_IdasAttribute * attribute;
	std::list<IF_IdasAttribute *> attributes;
	std::list<IF_IdasAttributeValue *> values;

	// resolve a Context UDI and open the Context

	IF_IdasContext * contextAliceMeta = idasclientResolveContext(L"local:AliceMeta", NULL, NULL);
		
	contextAliceMeta->open(NULL);

	// get Meta-Alice Entity and its h:correlations

	IF_IdasEntity * entityMetaAlice = contextAliceMeta->getEntity(L"Meta-Alice");
	wprintf(L"type of Meta-Alice in Alice's Meta context: %s\n", entityMetaAlice->getEntityType());

	attribute = entityMetaAlice->getAttribute(NAMESPACE_HIGGINS L"correlation");
	values = attribute->getValues();
	for (std::list<IF_IdasAttributeValue *>::iterator i = values.begin(); i != values.end(); i++) {

		IF_IdasSimpleAttributeValue * value = dynamic_cast<IF_IdasSimpleAttributeValue *> (* i);
		wprintf(L"h:correlation on Meta-Alice in Alice's Meta context: %s\n", value->getData());
	}

	// clean up

	values.clear();
	delete attribute;

	delete entityMetaAlice;

	delete contextAliceMeta;
}

UDIs

This section describes how UDIs are handled by this component.

1.A. local://ContextID#EntityID --> The IdAS Client uses a local XDI file which is the same for all users. It is included with the installation and can not be modified.

1.B. local://alice@ContextID#EntityID --> The IdAS Client uses a local XDI file which is specific to this user ("alice"). It can be modified by the client.

2.A. sync://ContextID#EntityID --> The IdAS Client uses a local XDI file which is the same for all users and gets synchronized with the backend. It can only be modified by the backend.

2.B. sync://alice@ContextID#EntityID --> The IdAS Client uses a local XDI file which is specific to this user ("alice") and gets synchronized with the backend. It can be modified both by the client and backend. --> There can be additional, globally resolvable UDIs that point to the same Context/Entity in the backend, e.g. http://service.azigo.net/contexts/alice/ContextID#EntityID

3. Anything else (e.g. http URI, XRI, Gmail address, inline XRDS) --> The IdAS Client resolves and opens the Context normally via the IdAS Proxy.

Building

The IdAS Client C++ Higgins project is:

  • app/org.eclipse.higgins.idasclient.cpp.core

This project can be checked out from the Eclipse repository at the following SVN URI:

https://dev.eclipse.org/svnroot/technology/org.eclipse.higgins/trunk/app/org.eclipse.higgins.idasclient.cpp.core

The shared library can be built with the tools "cmake", "nmake" and MS Visual C++.

Links

  • The XDI RDF Model is the current OASIS TC proposal for an RDF-based data model and addressing format for XDI. This document includes the proposed XDI RDF schema and a number of examples of XDI documents. (Note that it does not yet include the proposed XDI messaging format, which uses XDI documents as message envelopes for other XDI documents.)
  • OASIS XDI TC Wiki
  • Wikipedia page on XDI

Back to the top