diff --git a/LICENSE.md b/LICENSE.md index f523b6e5d..6997de162 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2015 CodePath, Inc. +Copyright (c) 2025 CodePath, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 74082bec8..af91dfc30 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,13 @@ Welcome to the open-source [Codepath](http://codepath.com) Android Cliffnotes! O [![CodePath](http://i.imgur.com/XgxWfyF.png)](http://codepath.com) -We have guides for everyone whether you are **beginner, intermediate or advanced**. Want to learn how to [use the ActionBar](https://github.com/codepath/android_guides/wiki/Defining-The-ActionBar) or the [ins and outs of fragments](https://github.com/codepath/android_guides/wiki/Creating-and-Using-Fragments)? We got that. Want to learn [about testing](https://github.com/codepath/android_guides/wiki/Android-Unit-and-Integration-testing) or how to [build flexible user interfaces for multiple devices](https://github.com/codepath/android_guides/wiki/Flexible-User-Interfaces)? We got you covered. We don't waste time with the "theoretical approach" from a book. We cover **exactly the things we use every day** as we are developing apps for contracts. +We have guides for everyone whether you are **beginner, intermediate or advanced**. Want to learn how to [use the ActionBar](https://github.com/codepath/android_guides/wiki/Defining-The-ActionBar) or the [ins and outs of fragments](https://github.com/codepath/android_guides/wiki/Creating-and-Using-Fragments)? We got that. Want to learn [about testing](https://github.com/codepath/android_guides/wiki/Android-Testing-Options) or how to [build flexible user interfaces for multiple devices](https://github.com/codepath/android_guides/wiki/Flexible-User-Interfaces)? We got you covered. We don't waste time with the "theoretical approach" from a book. We cover **exactly the things we use every day** as we are developing apps for contracts. **Need Help?** Please join the [google groups](https://groups.google.com/forum/#!forum/codepath-android-guides) for these guides where you can post related questions. ## Motivation -Ever been **frustrated finding information on outdated one-off blog posts and tutorials** that has since become irrelevant? How many times were you googling only to find your answer only on a **2 year old StackOverflow post**? We believe there's got to be a better way. Why not have the community work together to create useful and detailed documentation for every aspect of Android (or any platform)? There's absolutely no reason that we should have to make do with outdated, vague or un-editable content anymore. +Ever been **frustrated finding information on outdated one-off blog posts and tutorials** that has since become irrelevant? How many times have you been googling only to find your answer on a **2 year old Stack Overflow post**? We believe there's got to be a better way. Why not have a community to work together in creating useful and detailed documentation for every aspect of Android development(or any platform)? Read about our [mission to change the way engineers learn new technologies](https://github.com/codepath/android_guides/wiki/The-CodePath-Goal) and we would love for you to [get involved](https://github.com/codepath/android_guides/wiki/The-CodePath-Goal#how-do-i-help)! In addition, we are a fledgling startup so if you like this guide and what we are trying to do, please consider following us on twitter [@codepath](https://twitter.com/codepath)! @@ -18,23 +18,23 @@ Read about our [mission to change the way engineers learn new technologies](http Located in the San Francisco Bay Area and interested in learning with others in a more structured program? Check out our local [Android](http://www.meetup.com/Learning-Android-Development) or [iOS](http://www.meetup.com/Learning-iOS-Development-SF/) meetup events. We have free evening events and at-cost 1-day workshops to make learning social and connect you with others passionate about mobile. -If you are an experienced engineer (2+ years of professional experience in software development) and serious about learning Android, check out our [free evening 8-week Android bootcamp](http://codepath.com/androidbootcamp). Learn how to build mobile apps while collaborating with other engineers and designers. Work on solving important problems for non-profits with our free 8-week accelerated evening mobile bootcamp. [Learn more and apply here](http://courses.codepath.com/snippets/intro_to_android/about_bootcamp). +If you are an experienced engineer (2+ years of professional experience in software development) and serious about learning Android, check out our [free evening 8-week Android bootcamp](http://codepath.com/androidbootcamp). Learn how to build mobile apps while collaborating with other engineers and designers. Work on solving important problems for non-profits with our free 8-week accelerated evening mobile boot camp. [Learn more and apply here](http://courses.codepath.com/snippets/intro_to_android/about_bootcamp). ## We Need Your Help! We need your help making the guides even better. In particular, here are the easiest ways to contribute: -1. **Update Guides.** Review existing guides and update outdated content, add troubleshooting tips or add/update images +1. **Update Guides.** Review existing guides and update outdated content, add tips or add/update images 2. **Fill Out Guides.** Find guides that are [simply stubs](https://github.com/codepath/android_guides/issues/2) and fill them out with content. 3. **Create New Guides.** Review the [missing topics list](https://github.com/codepath/android_guides/issues/2) and create new topic guides. -We [maintain a master missing topics list](https://github.com/codepath/android_guides/issues/2) that contains the most important missing topics. Also look for items in the cliffnotes with the **Needs Attention** mark which indicates the guide needs some love. If you see a topic you'd like added, please check the [issues](https://github.com/codepath/android_guides/issues) for this repository to let us know. +We [maintain a master missing topics list](https://github.com/codepath/android_guides/issues/2) that contains the most important missing topics. Also, look for items in the cliff notes with the **Needs Attention** mark which indicates the guide needs some love. If you see a topic you'd like added, please check the [issues](https://github.com/codepath/android_guides/issues) for this repository to let us know. If you are interested in contributing to our guides, please check out our [contribution guidelines](https://github.com/codepath/android_guides/wiki/Contributing-Guidelines) first. ## Contributors -These guides were originally created and adapted by [Nathan Esquenazi](http://github.com/nesquena) +These guides were originally created and adapted by [Nathan Esquenazi](https://github.com/nesquena) as a part of our [CodePath](http://codepath.com) training and bootcamps. We have also had contributions from many community members including: @@ -50,3 +50,4 @@ community members including: * [Trevor Elkins](https://github.com/trevor-e) * [Adrian Romero](https://github.com/romeroadrian) * [Aaron Fleshner](https://github.com/adfleshner) + * [Steven Dobek](https://github.com/sdobek) diff --git a/guides b/guides index 876b9e277..6c236e883 160000 --- a/guides +++ b/guides @@ -1 +1 @@ -Subproject commit 876b9e2779111f1241d889f7bc849dfe25fd6e1d +Subproject commit 6c236e883cc70912ccdd859173050fc147d409f1 diff --git a/images/subcomponent_builders.gliffy b/images/subcomponent_builders.gliffy new file mode 100644 index 000000000..0fee8869f --- /dev/null +++ b/images/subcomponent_builders.gliffy @@ -0,0 +1 @@ +{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":620,"height":380,"nodeIndex":279,"autoFit":true,"exportBorder":false,"gridOn":true,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"maxWidth":5000,"maxHeight":5000,"themeData":null,"imageCache":null,"viewportType":"default","fitBB":{"min":{"x":20,"y":10},"max":{"x":620,"y":380}},"printModel":{"pageSize":"a4","portrait":false,"fitToOnePage":false,"displayPageBreaks":false},"objects":[{"x":32.5,"y":45.0,"rotation":0.0,"id":170,"width":100.0,"height":75.0,"uid":"com.gliffy.shape.uml.uml_v2.class.package","order":0,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":true,"heightInfo":[{"magnitude":1,"id":171},{"magnitude":1,"id":174}],"minHeight":0.0,"growParent":false,"padding":0.0}}]},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":171,"width":75.0,"height":18.0,"uid":null,"order":2,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"magnitude":1,"id":172}],"minHeight":0.0,"growParent":true,"padding":0.0}}]},"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":172,"width":75.0,"height":18.0,"uid":null,"order":5,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

 

","tid":null,"valign":"top","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":0.0,"y":18.0,"rotation":0.0,"id":173,"width":100.0,"height":57.0,"uid":null,"order":7,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"magnitude":1,"id":170},{"magnitude":-1,"id":171}],"minHeight":0.0,"growParent":false,"padding":0.0}},{"type":"PositionConstraint","PositionConstraint":{"nodeId":171,"px":0.0,"py":1.0,"xOffset":0.0,"yOffset":0.0}}]},"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":174,"width":100.0,"height":30.0,"uid":null,"order":10,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

Application

","tid":null,"valign":"top","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":430.0,"y":317.5,"rotation":0.0,"id":200,"width":170.0,"height":40.0,"uid":"com.gliffy.shape.uml.uml_v2.deployment.frame","order":11,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":true,"heightInfo":[{"magnitude":1,"id":201}],"minHeight":30.0,"growParent":false,"padding":0.0}},{"type":"WidthConstraint","WidthConstraint":{"isMin":true,"widthInfo":[{"magnitude":1,"id":201}],"minWidth":50.0,"growParent":false,"padding":0.0}}]},"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.no_fill_v1","strokeWidth":1.0,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":201,"width":147.0,"height":18.0,"uid":null,"order":13,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"magnitude":1,"id":202}],"minHeight":0.0,"growParent":true,"padding":0.0}},{"type":"WidthConstraint","WidthConstraint":{"isMin":false,"widthInfo":[{"magnitude":1,"id":202}],"minWidth":0.0,"growParent":true,"padding":5.0}}]},"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.frame.uml_v2","strokeWidth":1.0,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":202,"width":142.0,"height":18.0,"uid":null,"order":18,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"right","paddingTop":2,"paddingRight":5,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

Subomponent (Activity)

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":0.0,"y":15.0,"rotation":0.0,"id":203,"width":1.3159787640275165,"height":22.0,"uid":null,"order":15,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"magnitude":1,"id":200},{"magnitude":-1,"id":201}],"minHeight":20.0,"growParent":false,"padding":0.0}}]},"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.no_fill_no_line_v1","strokeWidth":1.0,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"children":[],"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":452.0,"y":60.0,"rotation":0.0,"id":204,"width":130.0,"height":60.0,"uid":"com.gliffy.shape.uml.uml_v2.class.simple_class","order":19,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":1.8571428571428572,"y":0.0,"rotation":0.0,"id":205,"width":126.28571428571429,"height":28.0,"uid":null,"order":21,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

Activity / Service / etc.

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":166.0,"y":85.0,"rotation":0.0,"id":206,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.component.realization","order":22,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":170,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":270,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"8.0,2.0","startArrow":0,"endArrow":6,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-33.5,-2.5],[-3.1552219392602012,-2.5],[27.189556121479598,-2.5],[57.534334182219396,-2.5]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":276,"width":36.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":5,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

builds

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":20.0,"y":10.0,"rotation":0.0,"id":227,"width":600.0,"height":370.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":25,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"none","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":465.0,"y":210.0,"rotation":0.0,"id":238,"width":100.0,"height":35.0,"uid":"com.gliffy.shape.uml.uml_v2.class.simple_class","order":26,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":1.4285714285714288,"y":0.0,"rotation":0.0,"id":240,"width":97.14285714285715,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

Builder

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":453.0,"y":264.0,"rotation":0.0,"id":241,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.component.realization","order":29,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":238,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":200,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"8.0,2.0","startArrow":0,"endArrow":4,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[62.0,-19.0],[62.0,5.166666666666686],[62.0,29.333333333333314],[62.0,53.5]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":242,"width":44.0,"height":14.0,"uid":null,"order":31,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.49176220407782145,"linePerpValue":0.0,"cardinalityType":null,"html":"

creates

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":250.0,"y":207.5,"rotation":0.0,"id":243,"width":100.0,"height":35.0,"uid":"com.gliffy.shape.uml.uml_v2.class.simple_class","order":32,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":1.4285714285714288,"y":0.0,"rotation":0.0,"id":244,"width":97.14285714285715,"height":28.0,"uid":null,"order":34,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

Module (binder)

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":776.0,"y":229.0,"rotation":0.0,"id":245,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.component.realization","order":35,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":204,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":238,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"8.0,2.0","startArrow":0,"endArrow":4,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-259.0,-109.0],[-259.0,-78.9925935068616],[-259.0,-48.98518701372322],[-259.0,-18.977780520584815]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":246,"width":44.0,"height":28.0,"uid":null,"order":37,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.49176220407782145,"linePerpValue":0.0,"cardinalityType":null,"html":"

adds

module

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":507.0,"y":552.0,"rotation":0.0,"id":253,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.deployment.dependency","order":41,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":243,"py":0.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":262,"py":1.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"8.0,2.0","startArrow":0,"endArrow":4,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-207.0,-344.5],[-207.0,-373.66666666666663],[-207.0,-402.83333333333337],[-207.0,-432.0]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":254,"width":50.0,"height":28.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.49142857142857144,"linePerpValue":0.0,"cardinalityType":null,"html":"

provides

builder

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":-138.0,"y":610.0,"rotation":0.0,"id":257,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.deployment.dependency","order":44,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":243,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":200,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"8.0,2.0","startArrow":0,"endArrow":6,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[438.0,-367.5],[438.0,-272.5],[568.0,-272.5]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":258,"width":181.0,"height":14.0,"uid":null,"order":46,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.2222222222222222,"linePerpValue":0.0,"cardinalityType":null,"html":"

@Module(subcomponents={ ... })

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":802.0,"y":294.0,"rotation":0.0,"id":259,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.component.realization","order":47,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":243,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":238,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"8.0,2.0","startArrow":0,"endArrow":4,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-452.0,-69.0],[-413.6576097655755,-69.0],[-375.31521953115106,-69.0],[-336.97282929672656,-69.0]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":260,"width":44.0,"height":14.0,"uid":null,"order":49,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.49176220407782145,"linePerpValue":0.0,"cardinalityType":null,"html":"

creates

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":240.0,"y":60.0,"rotation":0.0,"id":262,"width":120.0,"height":60.0,"uid":"com.gliffy.shape.uml.uml_v2.class.simple_class","order":50,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#999999","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":1.7142857142857146,"y":0.0,"rotation":0.0,"id":263,"width":116.57142857142858,"height":42.0,"uid":null,"order":52,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

Map

(builder class ->

builder)

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":-30.0,"y":620.0,"rotation":0.0,"id":266,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.deployment.dependency","order":56,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":204,"py":0.5,"px":0.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":262,"py":0.5,"px":1.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"8.0,2.0","startArrow":0,"endArrow":6,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[482.0,-530.0],[451.3333333333333,-530.0],[420.6666666666667,-530.0],[390.0,-530.0]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":267,"width":30.0,"height":14.0,"uid":null,"order":58,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.41304347826086957,"linePerpValue":0.0,"cardinalityType":null,"html":"

uses

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":223.5,"y":30.0,"rotation":0.0,"id":270,"width":159.99999999999997,"height":110.0,"uid":"com.gliffy.shape.uml.uml_v2.deployment.frame","order":59,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":true,"heightInfo":[{"magnitude":1,"id":271}],"minHeight":30.0,"growParent":false,"padding":0.0}},{"type":"WidthConstraint","WidthConstraint":{"isMin":true,"widthInfo":[{"magnitude":1,"id":271}],"minWidth":50.0,"growParent":false,"padding":0.0}}]},"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.no_fill_v1","strokeWidth":1.0,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":271,"width":154.0,"height":18.0,"uid":null,"order":61,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"magnitude":1,"id":272}],"minHeight":0.0,"growParent":true,"padding":0.0}},{"type":"WidthConstraint","WidthConstraint":{"isMin":false,"widthInfo":[{"magnitude":1,"id":272}],"minWidth":0.0,"growParent":true,"padding":5.0}}]},"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.frame.uml_v2","strokeWidth":1.0,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":272,"width":149.0,"height":18.0,"uid":null,"order":66,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"right","paddingTop":2,"paddingRight":5,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

Component (Application)

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"},{"x":0.0,"y":15.0,"rotation":0.0,"id":273,"width":1.0389610389610389,"height":92.0,"uid":null,"order":63,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[{"type":"HeightConstraint","HeightConstraint":{"isMin":false,"heightInfo":[{"magnitude":1,"id":270},{"magnitude":-1,"id":271}],"minHeight":20.0,"growParent":false,"padding":0.0}}]},"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.no_fill_no_line_v1","strokeWidth":1.0,"strokeColor":"#000000","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"children":[],"hidden":false,"layerId":"pTQxIOAggawI"}],"hidden":false,"layerId":"pTQxIOAggawI"}],"layers":[{"guid":"pTQxIOAggawI","order":0,"name":"Layer 0","active":true,"locked":false,"visible":true,"nodeIndex":67}],"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"none","stroke":"#333333","strokeWidth":2,"opacity":1}},"lineStyles":{"global":{"stroke":"#000000","strokeWidth":2,"endArrow":6,"orthoMode":1}},"textStyles":{"global":{"italic":false,"face":"Arial","size":"14px","color":"#999999","bold":true}}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.uml.uml_v2.state_machine","com.gliffy.libraries.uml.uml_v2.deployment","com.gliffy.libraries.uml.uml_v2.component","com.gliffy.libraries.uml.uml_v2.use_case","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.images"],"lastSerialized":1479415910113,"analyticsProduct":"Confluence"},"embeddedResources":{"index":0,"resources":[]}} \ No newline at end of file diff --git a/images/subcomponent_builders.png b/images/subcomponent_builders.png new file mode 100644 index 000000000..ea713d9b7 Binary files /dev/null and b/images/subcomponent_builders.png differ