diff --git a/asterix-bad/pom.xml b/asterix-bad/pom.xml
index 79297b0..c9ac366 100644
--- a/asterix-bad/pom.xml
+++ b/asterix-bad/pom.xml
@@ -27,7 +27,6 @@
     <properties>
     <asterix.version>0.9.5-SNAPSHOT</asterix.version>
     <hyracks.version>0.3.5-SNAPSHOT</hyracks.version>
-    <source-format.skip>true</source-format.skip>
     <testLog4jConfigFile>${root.dir}/../../asterix-app/src/test/resources/log4j2-test.xml</testLog4jConfigFile>
     </properties>
     <build>
@@ -117,6 +116,21 @@
           </ignoredUnusedDeclaredDependencies>
         </configuration>
       </plugin>
+      <plugin>
+        <groupId>net.revelc.code.formatter</groupId>
+        <artifactId>formatter-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>${source-format.goal}</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <configFile>../../../hyracks-fullstack/AsterixCodeFormatProfile.xml</configFile>
+          <skipFormatting>${source-format.skip}</skipFormatting>
+        </configuration>
+      </plugin>
     </plugins>
     <pluginManagement>
       <plugins>
diff --git a/asterix-bad/src/main/java/org/apache/asterix/bad/BADJobService.java b/asterix-bad/src/main/java/org/apache/asterix/bad/BADJobService.java
index 5ec4852..a711a9e 100644
--- a/asterix-bad/src/main/java/org/apache/asterix/bad/BADJobService.java
+++ b/asterix-bad/src/main/java/org/apache/asterix/bad/BADJobService.java
@@ -210,8 +210,7 @@
         ICcApplicationContext appCtx = metadataProvider.getApplicationContext();
         ActiveNotificationHandler activeEventHandler =
                 (ActiveNotificationHandler) appCtx.getActiveNotificationHandler();
-        DeployedJobSpecEventListener listener =
-                (DeployedJobSpecEventListener) activeEventHandler.getListener(entityId);
+        DeployedJobSpecEventListener listener = (DeployedJobSpecEventListener) activeEventHandler.getListener(entityId);
         if (listener == null) {
             LOGGER.severe("Tried to redeploy the job for " + entityId + " but no listener exists.");
             return;
diff --git a/asterix-bad/src/main/java/org/apache/asterix/bad/lang/BADLangExtension.java b/asterix-bad/src/main/java/org/apache/asterix/bad/lang/BADLangExtension.java
index 7a085a3..4a92cf0 100644
--- a/asterix-bad/src/main/java/org/apache/asterix/bad/lang/BADLangExtension.java
+++ b/asterix-bad/src/main/java/org/apache/asterix/bad/lang/BADLangExtension.java
@@ -67,7 +67,6 @@
         return ExtensionKind.LANG;
     }
 
-
     public static Broker getBroker(MetadataTransactionContext mdTxnCtx, String dataverseName, String brokerName)
             throws AlgebricksException {
         BrokerSearchKey brokerSearchKey = new BrokerSearchKey(dataverseName, brokerName);
diff --git a/asterix-bad/src/main/java/org/apache/asterix/bad/lang/BADQueryTranslatorExtension.java b/asterix-bad/src/main/java/org/apache/asterix/bad/lang/BADQueryTranslatorExtension.java
index 20519dd..23b44a7 100644
--- a/asterix-bad/src/main/java/org/apache/asterix/bad/lang/BADQueryTranslatorExtension.java
+++ b/asterix-bad/src/main/java/org/apache/asterix/bad/lang/BADQueryTranslatorExtension.java
@@ -27,8 +27,8 @@
 
 public class BADQueryTranslatorExtension implements IStatementExecutorExtension {
 
-    public static final ExtensionId BAD_QUERY_TRANSLATOR_EXTENSION_ID = new ExtensionId(
-            BADQueryTranslatorExtension.class.getSimpleName(), 0);
+    public static final ExtensionId BAD_QUERY_TRANSLATOR_EXTENSION_ID =
+            new ExtensionId(BADQueryTranslatorExtension.class.getSimpleName(), 0);
 
     private static class LazyHolder {
         private static final IStatementExecutorFactory INSTANCE = new BADQueryTranslatorFactory();
diff --git a/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/ProcedureTupleTranslator.java b/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/ProcedureTupleTranslator.java
index a0e6657..2bf00c0 100644
--- a/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/ProcedureTupleTranslator.java
+++ b/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/ProcedureTupleTranslator.java
@@ -96,8 +96,7 @@
         }
 
         String returnType = ((AString) procedureRecord
-                .getValueByPos(BADMetadataRecordTypes.PROCEDURE_ARECORD_PROCEDURE_TYPE_FIELD_INDEX))
-                        .getStringValue();
+                .getValueByPos(BADMetadataRecordTypes.PROCEDURE_ARECORD_PROCEDURE_TYPE_FIELD_INDEX)).getStringValue();
 
         String definition = ((AString) procedureRecord
                 .getValueByPos(BADMetadataRecordTypes.PROCEDURE_ARECORD_PROCEDURE_DEFINITION_FIELD_INDEX))
diff --git a/asterix-bad/src/main/java/org/apache/asterix/bad/recovery/BADGlobalRecoveryManager.java b/asterix-bad/src/main/java/org/apache/asterix/bad/recovery/BADGlobalRecoveryManager.java
index 162141f..38dc16d 100644
--- a/asterix-bad/src/main/java/org/apache/asterix/bad/recovery/BADGlobalRecoveryManager.java
+++ b/asterix-bad/src/main/java/org/apache/asterix/bad/recovery/BADGlobalRecoveryManager.java
@@ -118,19 +118,19 @@
         for (Channel channel : channels) {
             EntityId entityId = channel.getChannelId();
             metadataProvider = new MetadataProvider(appCtx, MetadataBuiltinEntities.DEFAULT_DATAVERSE);
-            DeployedJobSpecEventListener listener = new DeployedJobSpecEventListener(appCtx, entityId,
-                    channel.getResultsDatasetName().equals("") ? PrecompiledType.PUSH_CHANNEL
-                            : PrecompiledType.CHANNEL);
+            DeployedJobSpecEventListener listener =
+                    new DeployedJobSpecEventListener(appCtx, entityId, channel.getResultsDatasetName().equals("")
+                            ? PrecompiledType.PUSH_CHANNEL : PrecompiledType.CHANNEL);
             listener.suspend();
             activeEventHandler.registerListener(listener);
             RequestReference requestReference =
                     RequestReference.of(UUID.randomUUID().toString(), "CC", System.currentTimeMillis());
             BADJobService.redeployJobSpec(entityId, channel.getChannelBody(), metadataProvider, badStatementExecutor,
-                    hcc, new RequestParameters(requestReference, null, null, null, null, null, null, null, null, true), true);
+                    hcc, new RequestParameters(requestReference, null, null, null, null, null, null, null, null, true),
+                    true);
 
             ScheduledExecutorService ses = BADJobService.startRepetitiveDeployedJobSpec(listener.getDeployedJobSpecId(),
-                    hcc,
-                    BADJobService.findPeriod(channel.getDuration()), new HashMap<>(), entityId,
+                    hcc, BADJobService.findPeriod(channel.getDuration()), new HashMap<>(), entityId,
                     metadataProvider.getTxnIdFactory(), listener);
             listener.setExecutorService(ses);
             metadataProvider.getLocks().unlock();
@@ -151,12 +151,14 @@
             RequestReference requestReference =
                     RequestReference.of(UUID.randomUUID().toString(), "CC", System.currentTimeMillis());
             BADJobService.redeployJobSpec(entityId, procedure.getBody(), metadataProvider, badStatementExecutor, hcc,
-                    new RequestParameters(requestReference, null, new ResultSet(hcc,
-                            appCtx.getServiceContext().getControllerService().getNetworkSecurityManager()
-                                    .getSocketChannelFactory(), appCtx.getCompilerProperties().getFrameSize(),
-                            ResultReader.NUM_READERS),
+                    new RequestParameters(requestReference, null,
+                            new ResultSet(hcc,
+                                    appCtx.getServiceContext().getControllerService().getNetworkSecurityManager()
+                                            .getSocketChannelFactory(),
+                                    appCtx.getCompilerProperties().getFrameSize(), ResultReader.NUM_READERS),
                             new ResultProperties(IStatementExecutor.ResultDelivery.IMMEDIATE),
-                            new IStatementExecutor.Stats(), null, null, null, null, true), true);
+                            new IStatementExecutor.Stats(), null, null, null, null, true),
+                    true);
             metadataProvider.getLocks().unlock();
             //Log that the procedure stopped by cluster restart. Procedure is available again now.
             LOGGER.log(Level.SEVERE, entityId.getExtensionName() + " " + entityId.getDataverse() + "."
diff --git a/asterix-bad/src/main/java/org/apache/asterix/bad/rules/InsertBrokerNotifierForChannelRule.java b/asterix-bad/src/main/java/org/apache/asterix/bad/rules/InsertBrokerNotifierForChannelRule.java
index 258aaf1..79051b4 100644
--- a/asterix-bad/src/main/java/org/apache/asterix/bad/rules/InsertBrokerNotifierForChannelRule.java
+++ b/asterix-bad/src/main/java/org/apache/asterix/bad/rules/InsertBrokerNotifierForChannelRule.java
@@ -166,7 +166,6 @@
         badProject.getVariables().add(channelExecutionVar);
         context.computeAndSetTypeEnvironmentForOperator(badProject);
 
-
         //Create my brokerNotify plan above the extension Operator
         DelegateOperator dOp = push
                 ? createNotifyBrokerPushPlan(brokerEndpointVar, badProject.getVariables().get(0), channelExecutionVar,
@@ -202,8 +201,8 @@
         }
 
         //Create the NotifyBrokerOperator
-        DelegateOperator extensionOp = createBrokerOp(brokerEndpointVar, sendVar, channelExecutionVar, channelDataverse,
-                channelName, true);
+        DelegateOperator extensionOp =
+                createBrokerOp(brokerEndpointVar, sendVar, channelExecutionVar, channelDataverse, channelName, true);
 
         extensionOp.getInputs().add(new MutableObject<>(eOp));
         context.computeAndSetTypeEnvironmentForOperator(extensionOp);
@@ -212,10 +211,10 @@
 
     }
 
-    private DelegateOperator createNotifyBrokerPullPlan(LogicalVariable brokerEndpointVar,
-            LogicalVariable sendVar, LogicalVariable channelExecutionVar, IOptimizationContext context,
-            ILogicalOperator eOp, DistributeResultOperator distributeOp, String channelDataverse, String channelName)
-                    throws AlgebricksException {
+    private DelegateOperator createNotifyBrokerPullPlan(LogicalVariable brokerEndpointVar, LogicalVariable sendVar,
+            LogicalVariable channelExecutionVar, IOptimizationContext context, ILogicalOperator eOp,
+            DistributeResultOperator distributeOp, String channelDataverse, String channelName)
+            throws AlgebricksException {
 
         //Create the Distinct Op
         ArrayList<Mutable<ILogicalExpression>> expressions = new ArrayList<>();
@@ -223,7 +222,6 @@
         expressions.add(new MutableObject<>(vExpr));
         DistinctOperator distinctOp = new DistinctOperator(expressions);
 
-
         List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> groupByList = new ArrayList<>();
         List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> groupByDecorList = new ArrayList<>();
         List<ILogicalPlan> nestedPlans = new ArrayList<>();
@@ -252,7 +250,6 @@
         //add nested plans
         nestedPlans.add(new ALogicalPlanImpl(new MutableObject<>(listifyOp)));
 
-
         //Create the NotifyBrokerOperator
         DelegateOperator extensionOp = createBrokerOp(brokerEndpointVar, sendListVar, channelExecutionVar,
                 channelDataverse, channelName, false);
@@ -318,8 +315,8 @@
                 if (isBrokerScan((AbstractLogicalOperator) subOp.getValue())) {
                     return op;
                 } else {
-                    AbstractLogicalOperator nestedOp = findOp((AbstractLogicalOperator) subOp.getValue(),
-                            lookingForString);
+                    AbstractLogicalOperator nestedOp =
+                            findOp((AbstractLogicalOperator) subOp.getValue(), lookingForString);
                     if (nestedOp != null) {
                         return nestedOp;
                     }
@@ -329,8 +326,8 @@
                 if (subOp.getValue().getOperatorTag() == LogicalOperatorTag.PROJECT) {
                     return (AbstractLogicalOperator) subOp.getValue();
                 } else {
-                    AbstractLogicalOperator nestedOp = findOp((AbstractLogicalOperator) subOp.getValue(),
-                            lookingForString);
+                    AbstractLogicalOperator nestedOp =
+                            findOp((AbstractLogicalOperator) subOp.getValue(), lookingForString);
                     if (nestedOp != null) {
                         return nestedOp;
                     }
@@ -341,8 +338,8 @@
                 if (isSubscriptionsScan((AbstractLogicalOperator) subOp.getValue(), lookingForString)) {
                     return (AbstractLogicalOperator) subOp.getValue();
                 } else {
-                    AbstractLogicalOperator nestedOp = findOp((AbstractLogicalOperator) subOp.getValue(),
-                            lookingForString);
+                    AbstractLogicalOperator nestedOp =
+                            findOp((AbstractLogicalOperator) subOp.getValue(), lookingForString);
                     if (nestedOp != null) {
                         return nestedOp;
                     }
diff --git a/asterix-bad/src/main/java/org/apache/asterix/bad/runtime/NotifyBrokerPOperator.java b/asterix-bad/src/main/java/org/apache/asterix/bad/runtime/NotifyBrokerPOperator.java
index 264a994..13cd166 100644
--- a/asterix-bad/src/main/java/org/apache/asterix/bad/runtime/NotifyBrokerPOperator.java
+++ b/asterix-bad/src/main/java/org/apache/asterix/bad/runtime/NotifyBrokerPOperator.java
@@ -74,7 +74,7 @@
     @Override
     public void contributeRuntimeOperator(IHyracksJobBuilder builder, JobGenContext context, ILogicalOperator op,
             IOperatorSchema propagatedSchema, IOperatorSchema[] inputSchemas, IOperatorSchema outerPlanSchema)
-                    throws AlgebricksException {
+            throws AlgebricksException {
         DelegateOperator notify = (DelegateOperator) op;
         LogicalVariable pushListVar = ((NotifyBrokerOperator) notify.getDelegate()).getPushListVar();
         LogicalVariable brokerVar = ((NotifyBrokerOperator) notify.getDelegate()).getBrokerEndpointVariable();
@@ -96,8 +96,8 @@
         NotifyBrokerRuntimeFactory runtime = new NotifyBrokerRuntimeFactory(brokerEvalFactory, pushListEvalFactory,
                 channelExecutionEvalFactory, entityId, push, recordType);
 
-        RecordDescriptor recDesc = JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), propagatedSchema,
-                context);
+        RecordDescriptor recDesc =
+                JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), propagatedSchema, context);
 
         builder.contributeMicroOperator(op, runtime, recDesc);
 
diff --git a/asterix-bad/src/main/java/org/apache/asterix/bad/runtime/NotifyBrokerRuntime.java b/asterix-bad/src/main/java/org/apache/asterix/bad/runtime/NotifyBrokerRuntime.java
index a353edc..5b9ae8f 100644
--- a/asterix-bad/src/main/java/org/apache/asterix/bad/runtime/NotifyBrokerRuntime.java
+++ b/asterix-bad/src/main/java/org/apache/asterix/bad/runtime/NotifyBrokerRuntime.java
@@ -206,8 +206,7 @@
                     sendStreams.get(endpoint).append(',');
                 }
                 subscriptionIdListPrinterFactory.print(inputArg1.getByteArray(), inputArg1.getStartOffset(),
-                        inputArg1.getLength(),
-                        sendStreams.get(endpoint));
+                        inputArg1.getLength(), sendStreams.get(endpoint));
             }
             firstResult = false;
         }
diff --git a/asterix-bad/src/test/java/org/apache/asterix/bad/test/BADExecutionTest.java b/asterix-bad/src/test/java/org/apache/asterix/bad/test/BADExecutionTest.java
index f9a2e6e..f88a327 100644
--- a/asterix-bad/src/test/java/org/apache/asterix/bad/test/BADExecutionTest.java
+++ b/asterix-bad/src/test/java/org/apache/asterix/bad/test/BADExecutionTest.java
@@ -47,8 +47,8 @@
     protected static final Logger LOGGER = Logger.getLogger(BADExecutionTest.class.getName());
 
     protected static final String PATH_ACTUAL = "target/rttest" + File.separator;
-    protected static final String PATH_BASE = StringUtils.join(new String[] { "src", "test", "resources", "runtimets" },
-            File.separator);
+    protected static final String PATH_BASE =
+            StringUtils.join(new String[] { "src", "test", "resources", "runtimets" }, File.separator);
 
     protected static final String TEST_CONFIG_FILE_NAME = "src/main/resources/cc.conf";
 
@@ -64,7 +64,8 @@
     public static void setUp() throws Exception {
         File outdir = new File(PATH_ACTUAL);
         outdir.mkdirs();
-        ExecutionTestUtil.setUp(cleanupOnStart, TEST_CONFIG_FILE_NAME, new AsterixHyracksIntegrationUtil(), false, null);
+        ExecutionTestUtil.setUp(cleanupOnStart, TEST_CONFIG_FILE_NAME, new AsterixHyracksIntegrationUtil(), false,
+                null);
     }
 
     @AfterClass
diff --git a/asterix-bad/src/test/java/org/apache/asterix/bad/test/BADOptimizerTest.java b/asterix-bad/src/test/java/org/apache/asterix/bad/test/BADOptimizerTest.java
index af658d1..6c409a1 100644
--- a/asterix-bad/src/test/java/org/apache/asterix/bad/test/BADOptimizerTest.java
+++ b/asterix-bad/src/test/java/org/apache/asterix/bad/test/BADOptimizerTest.java
@@ -43,7 +43,7 @@
         extensionLangCompilationProvider = new BADCompilationProvider();
         statementExecutorFactory = new BADQueryTranslatorFactory();
 
-        integrationUtil.init(true,TEST_CONFIG_FILE_NAME);
+        integrationUtil.init(true, TEST_CONFIG_FILE_NAME);
         // Set the node resolver to be the identity resolver that expects node names
         // to be node controller ids; a valid assumption in test environment.
         System.setProperty(ExternalDataConstants.NODE_RESOLVER_FACTORY_PROPERTY,
diff --git a/asterix-bad/src/test/java/org/apache/asterix/bad/test/BADRecoveryTest.java b/asterix-bad/src/test/java/org/apache/asterix/bad/test/BADRecoveryTest.java
index 2003aed..e80bb4b 100644
--- a/asterix-bad/src/test/java/org/apache/asterix/bad/test/BADRecoveryTest.java
+++ b/asterix-bad/src/test/java/org/apache/asterix/bad/test/BADRecoveryTest.java
@@ -128,7 +128,6 @@
         this.tcCtx = tcCtx;
     }
 
-
     @Test
     public void test() throws Exception {
         testExecutor.executeTest(PATH_ACTUAL, tcCtx, pb, false);
