killbill-aplcache

Implement AUTO_INVOICING_OFF removal

7/14/2012 11:56:06 PM

Details

diff --git a/invoice/src/main/java/com/ning/billing/invoice/TagHandler.java b/invoice/src/main/java/com/ning/billing/invoice/TagHandler.java
new file mode 100644
index 0000000..01e82c1
--- /dev/null
+++ b/invoice/src/main/java/com/ning/billing/invoice/TagHandler.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+package com.ning.billing.invoice;
+
+import java.util.UUID;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.eventbus.Subscribe;
+import com.google.inject.Inject;
+import com.ning.billing.invoice.api.InvoiceApiException;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.CallOrigin;
+import com.ning.billing.util.callcontext.DefaultCallContext;
+import com.ning.billing.util.callcontext.UserType;
+import com.ning.billing.util.clock.Clock;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.tag.ControlTagType;
+import com.ning.billing.util.tag.api.ControlTagDeletionEvent;
+
+public class TagHandler {
+
+    private static final Logger log = LoggerFactory.getLogger(TagHandler.class);
+
+    private final Clock clock;
+    private final InvoiceDispatcher dispatcher;
+
+    @Inject
+    public TagHandler(final Clock clock,
+            final InvoiceDispatcher dispatcher) {
+        this.clock = clock;
+        this.dispatcher = dispatcher;
+    }
+
+    @Subscribe
+    public void process_AUTO_INVOICING_OFF_removal(final ControlTagDeletionEvent event) {
+        if (event.getTagDefinition().getName().equals(ControlTagType.AUTO_INVOICING_OFF.toString()) && event.getObjectType() ==  ObjectType.ACCOUNT) {
+            final UUID accountId = event.getObjectId();
+            processUnpaid_AUTO_INVOICING_OFF_invoices(accountId, event.getUserToken());
+        }
+    }
+
+    private void processUnpaid_AUTO_INVOICING_OFF_invoices(final UUID accountId, final UUID userToken) {
+        try {
+            final CallContext context = new DefaultCallContext("InvoiceTagHandler", CallOrigin.INTERNAL, UserType.SYSTEM, userToken, clock);
+            dispatcher.processAccount(accountId, clock.getUTCNow(), false, context);
+        } catch (InvoiceApiException e) {
+            log.warn(String.format("Failed to process process removal AUTO_INVOICING_OFF for account %s", accountId), e);
+        }
+    }
+}