1818import java .util .Map ;
1919
2020import javax .annotation .Nonnull ;
21+ import javax .annotation .Nullable ;
2122
2223import org .bson .Document ;
2324import org .slf4j .Logger ;
3233import com .helger .as2lib .partner .IPartnershipFactory ;
3334import com .helger .as2lib .partner .Partnership ;
3435import com .helger .commons .annotation .CodingStyleguideUnaware ;
36+ import com .helger .commons .annotation .ReturnsMutableCopy ;
3537import com .helger .commons .collection .attr .IStringMap ;
3638import com .helger .commons .collection .impl .CommonsArrayList ;
3739import com .helger .commons .collection .impl .CommonsHashMap ;
@@ -60,38 +62,58 @@ public class MongoDBPartnershipFactory extends AbstractDynamicComponent implemen
6062 private final MongoCollection <Document > m_aPartnerships ;
6163 private final Logger m_aLogger ;
6264
63- public MongoDBPartnershipFactory (final MongoCollection <Document > aPartnerships , @ Nonnull final Logger aLogger )
65+ public MongoDBPartnershipFactory (@ Nonnull final MongoCollection <Document > aPartnerships ,
66+ @ Nonnull final Logger aLogger )
6467 {
6568 m_aLogger = aLogger ;
6669 aPartnerships .createIndex (new Document (NAME_KEY , Integer .valueOf (1 )), new IndexOptions ().unique (true ));
6770 m_aPartnerships = aPartnerships ;
6871 }
6972
70- @ Override
71- public EChange addPartnership ( final Partnership aPartnership ) throws AS2Exception
73+ @ Nonnull
74+ private static Document _toBson ( @ Nonnull final IStringMap aStringMap )
7275 {
73- m_aPartnerships .insertOne (_toDocument (aPartnership ));
76+ final Document ret = new Document ();
77+ for (final Map .Entry <String , String > aEntry : aStringMap .entrySet ())
78+ ret .put (aEntry .getKey (), aEntry .getValue ());
79+ return ret ;
80+ }
81+
82+ @ Nonnull
83+ private static Document _toBson (@ Nonnull final Partnership aPartnership )
84+ {
85+ final Document ret = new Document ();
86+ ret .put (NAME_KEY , aPartnership .getName ());
87+ ret .put (RECEIVER_IDS , _toBson (aPartnership .getAllReceiverIDs ()));
88+ ret .put (SENDER_IDS , _toBson (aPartnership .getAllSenderIDs ()));
89+ ret .put (ATTRIBUTES , _toBson (aPartnership .getAllAttributes ()));
90+ return ret ;
91+ }
92+
93+ @ Nonnull
94+ public EChange addPartnership (@ Nonnull final Partnership aPartnership ) throws AS2Exception
95+ {
96+ m_aPartnerships .insertOne (_toBson (aPartnership ));
7497 return EChange .CHANGED ;
7598 }
7699
77- @ Override
78- public EChange removePartnership (final Partnership aPartnership ) throws AS2Exception
100+ @ Nonnull
101+ public EChange removePartnership (@ Nonnull final Partnership aPartnership ) throws AS2Exception
79102 {
80- final DeleteResult result = m_aPartnerships .deleteOne (new Document (NAME_KEY , aPartnership .getName ()));
81- if (result .getDeletedCount () >= 1l )
82- {
103+ final DeleteResult aDeleteResult = m_aPartnerships .deleteOne (new Document (NAME_KEY , aPartnership .getName ()));
104+ if (aDeleteResult .getDeletedCount () >= 1L )
83105 return EChange .CHANGED ;
84- }
106+
85107 return EChange .UNCHANGED ;
86108 }
87109
88- @ Override
89- public void updatePartnership (final IMessage aMsg , final boolean bOverwrite ) throws AS2Exception
110+ public void updatePartnership (@ Nonnull final IMessage aMsg , final boolean bOverwrite ) throws AS2Exception
90111 {
91112 // Fill in any available partnership information
92113 final Partnership aPartnership = getPartnership (aMsg .partnership ());
93114
94- m_aLogger .debug ("Updating partnership {}" , aPartnership );
115+ if (m_aLogger .isDebugEnabled ())
116+ m_aLogger .debug ("Updating partnership {}" , aPartnership );
95117
96118 // Update partnership data of message with the stored ones
97119 aMsg .partnership ().copyFrom (aPartnership );
@@ -107,143 +129,114 @@ public void updatePartnership (final IMessage aMsg, final boolean bOverwrite) th
107129 }
108130 }
109131
110- @ Override
111- public void updatePartnership (final IMessageMDN aMdn , final boolean bOverwrite ) throws AS2Exception
132+ public void updatePartnership (@ Nonnull final IMessageMDN aMdn , final boolean bOverwrite ) throws AS2Exception
112133 {
113134 final Partnership aPartnership = getPartnership (aMdn .partnership ());
114135 aMdn .partnership ().copyFrom (aPartnership );
115136 }
116137
117- @ Override
118- public Partnership getPartnership (final Partnership aPartnership ) throws AS2Exception
138+ @ Nullable
139+ private Partnership _getPartnershipByID (final IStringMap aAllSenderIDs , final IStringMap aAllReceiverIDs )
119140 {
120- Partnership aRealPartnership = getPartnershipByName (aPartnership .getName ());
121- if (aRealPartnership == null )
122- {
123- // Found no partnership by name
124- aRealPartnership = getPartnershipByID (aPartnership .getAllSenderIDs (), aPartnership .getAllReceiverIDs ());
125- }
126-
127- if (aRealPartnership == null )
128- {
129- throw new AS2PartnershipNotFoundException (aPartnership );
130- }
131- return aRealPartnership ;
132- }
141+ Document aFilter = new Document ();
142+ for (final Map .Entry <String , String > aEntry : aAllSenderIDs .entrySet ())
143+ aFilter .append (SENDER_IDS + "." + aEntry .getKey (), aEntry .getValue ());
133144
134- private Partnership getPartnershipByID (final IStringMap allSenderIDs , final IStringMap allReceiverIDs )
135- {
136- Document filter = new Document ();
137- for (final Map .Entry <String , String > entry : allSenderIDs .entrySet ())
138- {
139- filter .append (SENDER_IDS + "." + entry .getKey (), entry .getValue ());
140- }
141- for (final Map .Entry <String , String > entry : allReceiverIDs .entrySet ())
142- {
143- filter .append (RECEIVER_IDS + "." + entry .getKey (), entry .getValue ());
144- }
145+ for (final Map .Entry <String , String > aEntry : aAllReceiverIDs .entrySet ())
146+ aFilter .append (RECEIVER_IDS + "." + aEntry .getKey (), aEntry .getValue ());
145147
146- Partnership result = m_aPartnerships .find (filter ).map (MongoDBPartnershipFactory ::_toPartnership ).first ();
147- if (result != null )
148- {
149- return result ;
150- }
148+ Partnership ret = m_aPartnerships .find (aFilter ).map (MongoDBPartnershipFactory ::_toPartnership ).first ();
149+ if (ret != null )
150+ return ret ;
151151
152152 // try the other way around, maybe we're receiving a response
153153 // TODO is this really a good idea?
154- filter = new Document ();
155- for (final Map .Entry <String , String > entry : allSenderIDs .entrySet ())
156- {
157- filter .append (RECEIVER_IDS + "." + entry .getKey (), entry .getValue ());
158- }
159- for (final Map .Entry <String , String > entry : allReceiverIDs .entrySet ())
154+ aFilter = new Document ();
155+ for (final Map .Entry <String , String > entry : aAllSenderIDs .entrySet ())
156+ aFilter .append (RECEIVER_IDS + "." + entry .getKey (), entry .getValue ());
157+ for (final Map .Entry <String , String > entry : aAllReceiverIDs .entrySet ())
158+ aFilter .append (SENDER_IDS + "." + entry .getKey (), entry .getValue ());
159+
160+ final Partnership aInverseResult = m_aPartnerships .find (aFilter )
161+ .map (MongoDBPartnershipFactory ::_toPartnership )
162+ .first ();
163+ if (aInverseResult != null )
160164 {
161- filter .append (SENDER_IDS + "." + entry .getKey (), entry .getValue ());
165+ // Create an inverse partnership
166+ ret = new Partnership (aInverseResult .getName () + "-inverse" );
167+ ret .setReceiverX509Alias (aInverseResult .getSenderX509Alias ());
168+ ret .setReceiverAS2ID (aInverseResult .getSenderAS2ID ());
169+ ret .setSenderX509Alias (aInverseResult .getReceiverX509Alias ());
170+ ret .setSenderAS2ID (aInverseResult .getReceiverAS2ID ());
171+ return ret ;
162172 }
173+ return null ;
174+ }
163175
164- final Partnership inverseResult = m_aPartnerships .find (filter ).map (MongoDBPartnershipFactory ::_toPartnership ).first ();
165- if (inverseResult != null )
176+ @ Nonnull
177+ public Partnership getPartnership (@ Nonnull final Partnership aPartnership ) throws AS2Exception
178+ {
179+ Partnership aRealPartnership = getPartnershipByName (aPartnership .getName ());
180+ if (aRealPartnership == null )
166181 {
167- result = new Partnership (inverseResult .getName () + "-inverse" );
168- result .setReceiverX509Alias (inverseResult .getSenderX509Alias ());
169- result .setReceiverAS2ID (inverseResult .getSenderAS2ID ());
170- result .setSenderX509Alias (inverseResult .getReceiverX509Alias ());
171- result .setSenderAS2ID (inverseResult .getReceiverAS2ID ());
172-
173- return result ;
182+ // Found no partnership by name
183+ aRealPartnership = _getPartnershipByID (aPartnership .getAllSenderIDs (), aPartnership .getAllReceiverIDs ());
174184 }
175- return null ;
176185
186+ if (aRealPartnership == null )
187+ throw new AS2PartnershipNotFoundException (aPartnership );
188+
189+ return aRealPartnership ;
177190 }
178191
179- @ Override
180- public Partnership getPartnershipByName (final String sName )
192+ @ Nullable
193+ public Partnership getPartnershipByName (@ Nullable final String sName )
181194 {
182- return m_aPartnerships .find (new Document (NAME_KEY , sName )).map (MongoDBPartnershipFactory ::_toPartnership ).first ();
195+ if (sName == null )
196+ return null ;
197+ return m_aPartnerships .find (new Document (NAME_KEY , sName ))
198+ .map (MongoDBPartnershipFactory ::_toPartnership )
199+ .first ();
183200 }
184201
185- @ Override
202+ @ Nonnull
203+ @ ReturnsMutableCopy
186204 public ICommonsSet <String > getAllPartnershipNames ()
187205 {
188206 return m_aPartnerships .distinct (NAME_KEY , String .class ).into (new CommonsHashSet <> ());
189207 }
190208
191- @ Override
209+ @ Nonnull
210+ @ ReturnsMutableCopy
192211 public ICommonsList <Partnership > getAllPartnerships ()
193212 {
194213 return m_aPartnerships .find ().map (MongoDBPartnershipFactory ::_toPartnership ).into (new CommonsArrayList <> ());
195214 }
196215
197- private static Document _toDocument (final IStringMap stringMap )
216+ @ Nonnull
217+ private static Partnership _toPartnership (@ Nonnull final Document aBson )
198218 {
199- final Document document = new Document ();
200- for (final Map .Entry <String , String > entry : stringMap .entrySet ())
219+ final Partnership ret = new Partnership (aBson .getString (NAME_KEY ));
220+ final Document aBsonSenderIDs = (Document ) aBson .get (SENDER_IDS );
221+ final ICommonsMap <String , String > aSenderIDs = new CommonsHashMap <> (aBsonSenderIDs .size ());
222+ for (final Map .Entry <String , Object > aEntry : aBsonSenderIDs .entrySet ())
223+ aSenderIDs .put (aEntry .getKey (), aEntry .getValue ().toString ());
224+ ret .addSenderIDs (aSenderIDs );
225+
226+ final Document aBsonReceiverIDs = (Document ) aBson .get (RECEIVER_IDS );
227+ final ICommonsMap <String , String > aReceiverIDs = new CommonsHashMap <> (aBsonReceiverIDs .size ());
228+ for (final Map .Entry <String , Object > aEntry : aBsonReceiverIDs .entrySet ())
229+ aReceiverIDs .put (aEntry .getKey (), aEntry .getValue ().toString ());
230+ ret .addReceiverIDs (aReceiverIDs );
231+
232+ final Document aBsonAttributes = (Document ) aBson .get (ATTRIBUTES );
233+ if (aBsonAttributes != null )
201234 {
202- document .put (entry .getKey (), entry .getValue ());
203- }
204- return document ;
205- }
206-
207- private static Document _toDocument (final Partnership partnership )
208- {
209- final Document document = new Document ();
210- document .put (NAME_KEY , partnership .getName ());
211- document .put (RECEIVER_IDS , _toDocument (partnership .getAllReceiverIDs ()));
212- document .put (SENDER_IDS , _toDocument (partnership .getAllSenderIDs ()));
213- document .put (ATTRIBUTES , _toDocument (partnership .getAllAttributes ()));
214-
215- return document ;
216- }
217-
218- private static Partnership _toPartnership (final Document document )
219- {
220- final Partnership partnership = new Partnership (document .getString (NAME_KEY ));
221- final Document senderIDs = (Document ) document .get (SENDER_IDS );
222- final ICommonsMap <String , String > senders = new CommonsHashMap <> (senderIDs .size ());
223- for (final Map .Entry <String , Object > e : senderIDs .entrySet ())
224- {
225- senders .put (e .getKey (), e .getValue ().toString ());
226- }
227- partnership .addSenderIDs (senders );
228-
229- final Document receiverIDs = (Document ) document .get (RECEIVER_IDS );
230- final ICommonsMap <String , String > receivers = new CommonsHashMap <> (receiverIDs .size ());
231- for (final Map .Entry <String , Object > e : receiverIDs .entrySet ())
232- {
233- receivers .put (e .getKey (), e .getValue ().toString ());
234- }
235- partnership .addReceiverIDs (receivers );
236-
237- final Document attributes = (Document ) document .get (ATTRIBUTES );
238- if (attributes != null )
239- {
240- final ICommonsMap <String , String > att = new CommonsHashMap <> (receiverIDs .size ());
241- for (final Map .Entry <String , Object > e : attributes .entrySet ())
242- {
243- att .put (e .getKey (), e .getValue ().toString ());
244- }
245- partnership .addAllAttributes (att );
235+ final ICommonsMap <String , String > aAttrs = new CommonsHashMap <> (aBsonReceiverIDs .size ());
236+ for (final Map .Entry <String , Object > aEntry : aBsonAttributes .entrySet ())
237+ aAttrs .put (aEntry .getKey (), aEntry .getValue ().toString ());
238+ ret .addAllAttributes (aAttrs );
246239 }
247- return partnership ;
240+ return ret ;
248241 }
249242}
0 commit comments