/*
 * Copyright (c) 2009-2013 Topi Nieminen
 */
package fi.tnie.db.ent.value;

import fi.tnie.db.ent.Attribute;
import fi.tnie.db.ent.Entity;
import fi.tnie.db.ent.EntityFactory;
import fi.tnie.db.ent.EntityMetaData;
import fi.tnie.db.ent.Reference;
import fi.tnie.db.rpc.ReferenceHolder;
import fi.tnie.db.types.ReferenceType;


/**
 * Key to address an entity reference of the type <code>V</code> within an entity of type <code>E</code> 
 * 
 * @author tnie
 *
 * @param <R>
 * @param <T>
 * @param <E>
 * @param <S>
 * @param <P>
 * @param <VE>
 * @param <VH>
 * @param <VM>
 * @param <K>
 */
public interface EntityKey<	
	R extends Reference,
	T extends ReferenceType<?, R, T, E, ?, ?, S>,
	E extends Entity<?, R, T, E, ?, ?, S>,	
	S extends EntityMetaData<?, R, T, E, ?, ?, S>,	
	P extends ReferenceType<VA, VR, P, VE, VH, VF, VM>,
	VA extends Attribute,
	VR extends Reference,	
	VE extends Entity<VA, VR, P, VE, VH, VF, VM>,
	VH extends ReferenceHolder<VA, VR, P, VE, VH, VM>,
	VF extends EntityFactory<VE, VH, VM, VF>,
	VM extends EntityMetaData<VA, VR, P, VE, VH, VF, VM>,	
	K extends EntityKey<R, T, E, S, P, VA, VR, VE, VH, VF, VM, K>	
>
	extends Key<T, E, P, K>
{	
	R name();	
	VH newHolder(VE newValue);	
	VH get(E e);
	VE value(E e);
	void set(E e, VH newValue);
	void set(E e, VE newValue);
	
//	P getTargetType();
	S getSource();	
	VM getTarget();


}

@@ -509,17 +509,17 @@
 @param %3C
-S
+M
 %3E%0A * @pa
@@ -523,17 +523,18 @@
 @param %3C
-P
+RT
 %3E%0A * @pa
@@ -538,17 +538,17 @@
 @param %3C
-V
+R
 E%3E%0A * @p
@@ -553,17 +553,17 @@
 @param %3C
-V
+R
 H%3E%0A * @p
@@ -568,17 +568,17 @@
 @param %3C
-V
+R
 M%3E%0A * @p
@@ -684,17 +684,17 @@
 , ?, ?, 
-S
+M
 %3E,%0A%09E ex
@@ -728,15 +728,15 @@
  ?, 
-S
+M
 %3E,%09%0A%09
-S
+M
  ext
@@ -777,15 +777,16 @@
  ?, 
-S
+M
 %3E,%09%0A%09
-P
+RT
  ext
@@ -808,38 +808,39 @@
 ype%3C
-VA, VR, P, VE, VH, VF, V
+RA, RR, RT, RE, RH, RF, R
 M%3E,%0A%09
-V
+R
 A ex
@@ -857,17 +857,17 @@
 ibute,%0A%09
-V
+R
 R extend
@@ -881,17 +881,17 @@
 ence,%09%0A%09
-V
+R
 E extend
@@ -903,38 +903,39 @@
 ity%3C
-VA, VR, P, VE, VH, VF, V
+RA, RR, RT, RE, RH, RF, R
 M%3E,%0A%09
-V
+R
 H ex
@@ -960,34 +960,35 @@
 der%3C
-VA, VR, P, VE, VH, V
+RA, RR, RT, RE, RH, R
 M%3E,%0A%09
-V
+R
 F ex
@@ -1011,27 +1011,27 @@
 ory%3C
-VE, VH, VM, V
+RE, RH, RM, R
 F%3E,%0A%09
-V
+R
 M ex
@@ -1055,32 +1055,33 @@
 ata%3C
-VA, VR, P, VE, VH, VF, V
+RA, RR, RT, RE, RH, RF, R
 M%3E,%09
@@ -1115,35 +1115,36 @@
  E, 
-S, P, VA, VR, VE, VH, VF, V
+M, RT, RA, RR, RE, RH, RF, R
 M, K
@@ -1167,17 +1167,18 @@
 y%3CT, E, 
-P
+RT
 , K%3E%0A%7B%09%0A
@@ -1190,17 +1190,17 @@
 me();%09%0A%09
-V
+R
 H newHol
@@ -1203,17 +1203,17 @@
 wHolder(
-V
+R
 E newVal
@@ -1219,17 +1219,17 @@
 lue);%09%0A%09
-V
+R
 H get(E 
@@ -1233,17 +1233,17 @@
 (E e);%0A%09
-V
+R
 E value(
@@ -1263,17 +1263,17 @@
 et(E e, 
-V
+R
 H newVal
@@ -1292,17 +1292,17 @@
 et(E e, 
-V
+R
 E newVal
@@ -1331,17 +1331,17 @@
 ype();%0A%09
-S
+M
  getSour
@@ -1348,17 +1348,17 @@
 ce();%09%0A%09
-V
+R
 M getTar

Rename type parameters in EntityKey