Skip to content

Commit c14231b

Browse files
committed
Slightly improved
1 parent 62cb8f7 commit c14231b

1 file changed

Lines changed: 109 additions & 116 deletions

File tree

as2-partnership-mongodb/src/main/java/com/helger/as2lib/partner/mongodb/MongoDBPartnershipFactory.java

Lines changed: 109 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.Map;
1919

2020
import javax.annotation.Nonnull;
21+
import javax.annotation.Nullable;
2122

2223
import org.bson.Document;
2324
import org.slf4j.Logger;
@@ -32,6 +33,7 @@
3233
import com.helger.as2lib.partner.IPartnershipFactory;
3334
import com.helger.as2lib.partner.Partnership;
3435
import com.helger.commons.annotation.CodingStyleguideUnaware;
36+
import com.helger.commons.annotation.ReturnsMutableCopy;
3537
import com.helger.commons.collection.attr.IStringMap;
3638
import com.helger.commons.collection.impl.CommonsArrayList;
3739
import 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

Comments
 (0)