b/163142235 Update README with library and command line usage

Change-Id: I395fb47362d814345c510744154f3babb3431e1a
diff --git a/README.md b/README.md
index 58fc808..5dc745f 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,108 @@
 command line application and a library of security tooling that analyzes the OAS
 document.
 
+## Components
+- `oas-cli` : The command line tool with the main class to check security validation of specifications.
+- `oas-core` : The core library with features like parsing, traversing, and validating an OpenAPI Specification.
+- `oas-test` : This module contains any shared testing implementations like marker interfaces for integration tests.
+## Command Line Usage
+The command line tool can be invoked like:
+
+```java -jar api-security-tools.jar --file openApiSpecification.json ```
+
+It performs:
+- File validation.
+- OpenApi Specification Standard validation.
+- Supported security extensions validation.
+
+If there are any errors in the usage of the extensions, then the error type and message will be shown along with the extension path.
+
+## Building and Testing
+`./gradlew build`
+
+This will
+- Compile project.
+- Validate against ErrorProne and CheckStyle.
+- Run both unit and integration tests.
+- Generate code coverage report.
+
+## Validator Library
+
+The core library is responsible to traverse a YAML or JSON document and search for extensions. Every `Extension` can then be validated using custom validators.
+
+An example is shown below.
+
+Let's start by configuring the guice dependencies.
+```
+/**
+ * Guice module that installs all required bindings.
+ */
+public class MainModule extends AbstractModule {
+
+  @Override
+  protected void configure() {
+    install(new ExtendedValidatorMainModule());
+    install(new BaseParserModule());
+    binder().requireExplicitBindings();
+  }
+}
+```
+Create a simple validator that implements `ExtensionValidator`
+```
+class CustomValidator implements ExtensionValidator {
+
+    public CustomValidator() {}
+
+    @Override
+    public ImmutableSet<ExtensionValidationMessage> validate(Extension extension) {
+        // validation logic
+        // extension.getExtensionPath(), extension.getExtensionContent(), extension.getExtensionName()
+    }
+}
+```
+Inject the required dependencies into your class.
+```
+public class ExtensionValidationExample {
+    
+    private BaseParser baseParser;
+    private ExtendedValidator extendedValidator;
+    private TraversalHelperFactory traversalHelperFactory;
+
+    @Inject
+    ExtensionValidationExample(BaseParser baseParser, 
+                               ExtendedValidator extendedValidator,
+                               TraversalHelperFactory traversalHelperFactory) {
+        this.baseParser =baseParser;
+        this.extendedValidator = extendedValidator;
+        this.traversalHelperFactory = traversalHelperFactory;
+    }
+
+    void validate(File file) {
+        OpenApi3 openApi = baseParser.parse(file);
+
+        // Send traversal command for openapi object
+        TraversalHelper traversalHelper = traversalHelperFactory.create(ImmutableList.of());
+        traversalHelper.sendOpenApiTraversal(openApiSpec);
+        ImmutableSet<Extension> extensions = traversalHelper.traverse()
+        
+        CustomValidator customValidator = new CustomValidator();
+
+        // Validate an extension
+        if(!extensions.isEmpty()) {
+            ImmutableSet<ExtensionValidationMessage> errors = extensions.iterator().next().validate(customValidator);
+            System.out.println("Found %d extension validation errors.\n\n", errors.size());
+        }
+    }
+}
+
+```
+Run it using:
+
+```
+ExtensionValidationExample extensionValidation = Guice.createInjector(new MainModule()).getInstance(ExtensionValidationExample.class);
+extensionValidation.validate(file);
+```
+
 ## LICENSE
 
 Copyright 2020 Google LLC.