1  



package
 hudsonfog.voc.classifieds;

2  



3  



import
 com.fogx.webdav.DavResource;

4  



import
 com.fogx.webdav.DavClass;

5  



import
 com.fogx.webdav.DavBean;

6  



import
 com.fogx.webdav.DavProperty;

7  



import

static
 com.fogx.webdav.DavProperty.*;

8  



import
 com.fogx.webdav.packages.DavBeanPackage;

9  



import
 com.fogx.webdav.util.DavResourceSupport;

10 



import
 com.fogx.webdav.util.UrlUtil;

11 



import
 java.util.Date;

12 



import
 java.util.Map;

13 



import
 java.util.HashMap;

14 



import
 java.util.List;

15 



import
 java.util.Collections;

16 



import
 java.util.Arrays;

17 



18 



import

hudsonfog.voc.system.readHistory
.*;

19 



import

hudsonfog.voc.model.company
.*;

20 



import

hudsonfog.voc.model.humanResources
.*;

21 



import

hudsonfog.voc.system.behavior
.*;

22 



import

hudsonfog.voc.model.recurrence
.*;

23 



import

hudsonfog.voc.model.portal
.*;

24 



import

hudsonfog.voc.system.parse
.*;

25 



import

hudsonfog.voc.system.identity
.*;

26 



import

hudsonfog.voc.aspects.ui
.*;

27 



import

hudsonfog.voc.classifieds.jobs
.*;

28 



import

hudsonfog.voc.system.primitiveTypes
.*;

29 



import

hudsonfog.voc.model.top
.*;

30 



import

hudsonfog.voc.system.XMLSchema
.*;

31 



32 



import

hudsonfog.voc.system.fog
.*;

33 



34 



35 



public

abstract

class
 jobs {

36 



37 



/**

38 


 * Job offered by a specific organization.

39 


 */

40 


  @DavClass._largeIcon(
"icons/classes/jobs-Job-large.gif"
)

41 


  @DavClass._viewCols(
"title, skillCategory, salary, featuredJob, region, city, company, dateSubmitted, myUnreadMessages, myFlaggedMessages, alreadyViewedByMe"
)

42 


  @DavClass._notSiteSharable

43 


  @DavClass._editCols(
"title, skillCategory, salary, featuredJob, region, city, positionType"
)

44 


  @DavClass._icon(
"icons/classes/jobs-Job.gif"
)

45 


  @DavClass._skipAccessControl

46 



public

static

class
 Job 
implements
 CollaborationPoint, FileSystem, Address1, Trackable {

47 


         @_autoincrement

48 


         @_readOnly

49 


         @_notSearchable

50 


      @k 
public
 Integer                       jobId;

51 



public
 Industry                      industry; 
//* industry of the employer

52 




public
 JobCategory                   jobCategory; 
//* area of work or type of employment

53 



      @
r

public
 SkillCategory                 skillCategory; 
//* skill category, like 'web developer'

54 



         @_resourceLink

55 


         @_displayNameElm

56 


         @_cloneOf(
"subject"
)

57 


      @c 
public
 String                        title;

58 


         @_sortAscending(
false
)

59 


      @c 
public
 ComplexDate                   dateSubmitted; 
//* when this message entered the system

60 



         @_allowRoles(
"self, admin"
)

61 


      @c 
public
 Contact                       submittedBy;

62 


         @_onCreate

63 



public
 Boolean                       partTime = writeJS(
"'false'"
); 
//* yes - part time, no - full time

64 




public
 PositionType                  positionType;

65 



public
 CompanyType                   companyType;

66 


         @_onCreate

67 



public
 SalaryType                    salaryType = writeJS(
"'annual salary'"
);

68 


         @_icon(
"icons/classes/Money.gif"
)

69 



public
 Money                         salary;

70 



public
 Boolean                       requiresSecurityClearing;

71 


         @_icon(
"icons/featured.gif"
)

72 


         @_readOnly

73 


         @_colorCoding(
"'True' icons/featured.gif; 'False' icons/blank.gif"
)

74 



public
 Boolean                       featuredJob; 
//* special paid-for upgraded Job advertisement

75 



         @_displayInline

76 


         @_cloneOf(
"description"
)

77 


      @c 
public
 longString                    jobDescription;

78 


         @_backLink(
"job"
)

79 


         @_displayInline

80 



public
 Qualification[]               qualifications;

81 


         @_maxSize(
60000
)

82 


         @_avoidDisplaying

83 



public
 longString                    all_qualifications; 
// accumulates all backlinked qualifications for searching purposes

84 



         @_maxSize(
5000
)

85 


         @_displayInline

86 



public
 String                        responsibilities;

87 


         @_icon(
"icons/company.gif"
)

88 


         @_allowPermissions(
"MKRESOURCE, PROPPATCH, PUT"
)

89 


         @_avoidDisplaying(
false
)

90 



public
 Employer                      company; 
//        :: e.senderOrganization;  //* if omitted for confidentiality reasons - see company description

91 



         @_maxSize(
2000
)

92 


         @_notSearchable

93 


         @_displayInline

94 


         @_onCreate

95 



public
 String                        companyInfo = writeJS(
"companyInfo ? companyInfo : company ? company.description : null"
);

96 



public
 String                        reportingTo; 
//* a manager who will supervise the employee

97 




public
 String                        department; 
//* department or group within employer's organization

98 



         @_icon(
"icons/Status.gif"
)

99 


         @_colorCoding(
"'Open' icons/status_open.gif; 'Expired' icons/status_forbid.gif; 'Cancelled' icons/status_cancelled.gif"
)

100


         @_onCreate

101



public
 JobStatus                     jobStatus = writeJS(
"jobStatus ? jobStatus : 'Open'"
); 
//* status of this Job

102



         @_onCreate

103



public
 Long                          startingFrom = writeJS(
"dateSubmitted"
); 
//* when Job must be filled; if not specified - starting immediately

104



         @_onCreate

105



public
 Long                          expirationDate = writeJS(
"new Date().getTime() + 30 * 24 * 3600"
); 
//* date when this Job opening will expire

106



         @_notSearchable

107



public
 String                        jobCode; 
//* employer's job identifier

108



         @_backLink(
"job"
)

109



public
 JobApplication[]              applications;

110


         @_cloneOf(
"country1"
)

111


      @c 
public
 Country                       country;

112


         @_label(
"State"
)

113


         @_cloneOf(
"region1"
)

114


      @c 
public
 String                        region;

115


         @_cloneOf(
"city1"
)

116


      @c 
public
 String                        city; 
//* city, town, village, township

117



         @_cloneOf(
"postalCode1"
)

118


      @c 
public
 String                        postalCode;

119


      @c 
public
 km                            radius; 
//* ex. within 10 miles from certain zip code

120



      @c 
public
 km                            distance; 
//* distance of this location from the specified zip code

121



         @_cloneOf(
"address11"
)

122


      @c 
public
 String                        address1; 
//* street address, building number, PO Box, etc.

123



         @_backLink(
"forResource"
)

124


      @c 
public
 SharedFile[]                  attachments;

125


         @_cloneOf(
"attachmentsUrl"
)

126


      @c 
public
 String                        url;

127


         @_avoidDisplaying

128


         @_backLink(
"forum"
)

129


         @_cloneOf(
"members"
)

130


      @c 
public
 Subscription[]                subscription;

131


         @_notSearchable

132


         @_backLink(
"forum"
)

133



public
 Subscribed[]                  subscribers;

134


         @_backLink(
"invitedTo"
)

135


         @_cloneOf(
"invited"
)

136


      @c 
public
 Invitation[]                  invitedSubscribers;

137


         @_backLink(
"forum"
)

138


         @_cloneOf(
"pending"
)

139


      @c 
public
 PendingSubscription[]         pendingSubscribers; 
//* permission to subscribe requests

140



         @_backLink(
"forum"
)

141


         @_displayInline

142


      @c 
public
 Comment[]                     comments;

143


      @c 
public
 Comment                       lastComment;

144


         @_backLink(
"forResource"
)

145


         @_displayInline

146


      @c 
public
 ChatHistoryFile[]             chatHistory;

147


         @_dateFormat(
"~MMM-dd, yyyy HH:mm"
)

148


         @_icon(
"icons/classes/Comment.gif"
)

149


         @_readOnly

150



public
 ComplexDate                   lastCommentTime = formula(
"lastComment.submitTime"
);

151


         @_backLink(
"associatedWith"
)

152


      @c 
public
 Message[]                     myUnreadMessages;

153


         @_backLink(
"associatedWith"
)

154


      @c 
public
 Message[]                     myFlaggedMessages;

155


         @_backLink(
"forResource"
)

156


         @_cloneOf(
"readHistory"
)

157


      @c 
public
 TrackedRead[]                 views; 
//* history of viewing for this Job

158



         @_backLink(
"forResource"
)

159


         @_cloneOf(
"myLastRead"
)

160


      @c 
public
 TrackedRead[]                 myView; 
//* did I view this Job already?

161



      @c 
public
 Integer                       alreadyViewedByMe; 
//* marked if I opened to view this resource at least once

162



  }

163



164



public

static
 enum JobCategory {

165


    @_label(
"Admin. and Business Support Services"
) Admin_AndBusinessSupportServices, @_label(
"Advertising and Public Relations"
) AdvertisingAndPublicRelations, @_label(
"Arts and Recreation Services"
) ArtsAndRecreationServices, @_label(
"Associations and Organizations"
) AssociationsAndOrganizations, Education, @_label(
"Financial Services and Insurance"
) FinancialServicesAndInsurance, @_label(
"Health Care"
) HealthCare, @_label(
"Hospitality and Food Service"
) HospitalityAndFoodService, @_label(
"Information and Communications"
) InformationAndCommunications, Manufacturing, @_label(
"Personal and Household Services"
) PersonalAndHouseholdServices, @_label(
"Professional; Scientific and Tech. Svcs"
) Professional_ScientificAndTech_Svcs, @_label(
"Real Estate and Leasing"
) RealEstateAndLeasing, @_label(
"Retail Stores"
) RetailStores, @_label(
"Retail; Non-Store"
) Retail_Non_Store, @_label(
"Social Services"
) SocialServices, @_label(
"Other Employers and Industries"
) OtherEmployersAndIndustries;

166


  }

167



168



public

static
 enum PositionType {

169


    employee, contract, @_label(
"contract-to-hire"
) contract_to_hire, temp, @_label(
"temp-to-employee"
) temp_to_employee, internship, summer;

170


  }

171



172



public

static
 enum SalaryType {

173


    @_label(
"annual salary"
) annualSalary, @_label(
"hourly wage"
) hourlyWage;

174


  }

175



176



public

static
 enum CompanyType {

177


    @_label(
"Direct Employer"
) DirectEmployer, @_label(
"Staffing Firm"
) StaffingFirm;

178


  }

179



180



/**

181


 * SkillCategory definition and applicable Skills

182


 */

183


  @DavClass._copyByReference

184


  @DavClass._largeIcon(
"icons/classes/JobPosition-large.gif"
)

185


  @DavClass._skipAccessControl

186


  @DavClass._cachable

187



public

static

class
 SkillCategory 
implements
 Folder, Styled {

188


         @_sortAscending

189


      @k 
public
 String                        name; 
//* position title

190



         @_backLink(
"skillCategory"
)

191


         @_displayInline

192


         @_cloneOf(
"folderItems"
)

193


      @c 
public
 SkillType[]                   skills; 
//* skills applicable for this position

194



      @c 
public
 styleSheet                    styleSheet;

195


         @_maxSize(
2000
)

196


         @_icon(
"icons/description.gif"
)

197


         @_displayInline

198



public
 String                        description;

199


  }

200



201



/**

202


 * Skill applicable to a certain position

203


 */

204


  @DavClass._copyByReference

205


  @DavClass._viewCols(
"skillCategory, name"
)

206


  @DavClass._cachable

207


  @DavClass._nmbResourcesInRow(
2
)

208


  @DavClass._styleSheet(
"background: #D7D8FB;border-bottom: 1px solid #104A7B;border-right: 1px solid #104A7B;border-left: 1px solid #AFC4D5;border-top:1px solid #AFC4D5;color:#000066;height:40pt;text-decoration:none; cursor: pointer"
)

209



public

static

class
 SkillType 
implements
 FolderItem, Styled {

210


         @_displayNameElm

211


         @_containerMember

212


         @_cloneOf(
"folder"
)

213


    @k@c 
public
 SkillCategory                 skillCategory;

214


         @_resourceLink

215


         @_displayNameElm

216


         @_skipLabelInGrid

217


      @k 
public
 String                        name;

218


      @c 
public
 styleSheet                    styleSheet = writeJS(
"skillCategory.styleSheet"
);

219


         @_maxSize(
2000
)

220


         @_icon(
"icons/description.gif"
)

221


         @_displayInline

222



public
 String                        description;

223


         @_avoidDisplaying

224


         @_backLink(
"skillType"
)

225



public

hudsonfog.voc.classifieds.jobs.Skill
[] jobSkills;

226


         @_avoidDisplaying

227


         @_backLink(
"skillType"
)

228



public

hudsonfog.voc.model.humanResources.Skill
[] hrSkills;

229


  }

230



231



/**

232


 * Qualification required for a certain Job

233


 */

234


  @DavClass._copyByReference

235


  @DavClass._largeIcon(
"icons/classes/Qualification-large.gif"
)

236


  @DavClass._icon(
"icons/classes/Qualification.gif"
)

237


  @DavClass._skipAccessControl

238


  @DavClass._nmbResourcesInRow(
2
)

239



public

static

class
 Qualification {

240


      @k 
public
 Job                           job;

241


         @_displayNameElm

242


         @_sortAscending

243


         @_displaySize(
120
)

244


      @k 
public
 String                        skillName;

245


  }

246



247


  @DavClass._validUser

248


  @DavClass._largeIcon(
"icons/classes/Skill-large.gif"
)

249


  @DavClass._nmbResourcesInRow(
2
)

250


  @DavClass._icon(
"icons/classes/Skill.gif"
)

251



public

static

class
 Skill 
implements
 LineItem, Cancellable {

252


         @_containerMember

253


      @k 
public
 Resume                        resume;

254


         @_displayNameElm

255


         @_containerMember

256


         @_cloneOf(
"item"
)

257


    @k@c 
public
 SkillType                     skillType;

258


         @_sortAscending(
false
)

259



public
 Float                         yearsExperience; 
//* specify years of experience in this skill (use decimal point if less then 2 years)

260




public
 SkillRating                   rating; 
//* rate how strong is the knowledge of this skill

261



      @c 
public
 Boolean                       cancelled;

262


  }

263



264



public

static
 enum SkillRating {

265


    ultimate, high, strong, medium, low, minimal;

266


  }

267



268


  @DavClass._validUser

269


  @DavClass._largeIcon(
"icons/classes/Education-large.gif"
)

270


  @DavClass._icon(
"icons/classes/Education.gif"
)

271



public

static

class
 Education {

272


      @k 
public
 Resume                        resume;

273


         @_avoidDisplaying

274


      @k 
public
 Integer                       seq;

275


         @_displayNameElm

276



public
 String                        institution;

277


         @_displayNameElm

278



public
 String                        degree;

279



public
 String                        major;

280



public
 Float                         GPA;

281


         @_sortAscending(
false
)

282



public
 String                        datesAttended;

283


         @_maxSize(
4000
)

284



public
 String                        description;

285


  }

286



287



/**

288


 * Job application. Can be submitted online or by email

289


 */

290


  @DavClass._viewCols(
"resume, coverLetter, notes, job, dateSubmitted, status, interviews, myUnreadMessages, myFlaggedMessages"
)

291


  @DavClass._largeIcon(
"icons/classes/JobApplication-large.gif"
)

292


  @DavClass._icon(
"icons/classes/JobApplication.gif"
)

293



public

static

class
 JobApplication 
implements
 CollaborationPoint, FileSystem {

294


         @_displayNameElm

295


      @k 
public
 Job                           job;

296


    @k@c 
public
 ComplexDate                   dateSubmitted; 
//* when this message entered the system

297



         @_allowRoles(
"self, admin"
)

298


         @_cloneOf(
"submittedBy"
)

299


      @c 
public
 Contact                       applicant; 
//* will not be shown to employer

300



         @_lookupFrom(
"applicant.resumes"
)

301


      @k 
public
 Resume                        resume; 
//* applicant's resume

302



         @_lookupFrom(
"applicant.coverLetters"
)

303



public
 CoverLetter                   coverLetter;

304


         @_cloneOf(
"description"
)

305


      @c 
public
 String                        notes;

306



public
 Boolean                       haveReliableTransportation; 
//* applicant has reliable transportation to this Job's location

307



         @_icon(
"icons/Status.gif"
)

308


         @_onCreate

309


         @_colorCoding(
"'Submitted' icons/status_submitted.gif; 'Received' icons/status_open.gif; 'Denied' icons/status_broken.gif; 'Scheduled Interview' icons/status_inprogress.gif; 'Offered Job' icons/status_fixed.gif"
)

310



public
 ApplicationStatus             status = writeJS(
"status ? status : 'Submitted'"
);

311


         @_backLink(
"forResource"
)

312


      @c 
public
 SharedFile[]                  attachments; 
//* resume and other documents (awards, prior work samples, etc.) that may help qualifying the candidate

313



         @_cloneOf(
"attachmentsUrl"
)

314


      @c 
public
 String                        url;

315


         @_backLink(
"application"
)

316


         @_allowRoles(
"self, admin"
)

317



public
 Interview[]                   interviews; 
//* scheduled and prior interviews

318



         @_avoidDisplaying

319


         @_backLink(
"forum"
)

320


         @_cloneOf(
"members"
)

321


      @c 
public
 Subscription[]                subscription;

322


         @_notSearchable

323


         @_backLink(
"forum"
)

324



public
 Subscribed[]                  subscribers;

325


         @_backLink(
"invitedTo"
)

326


         @_cloneOf(
"invited"
)

327


      @c 
public
 Invitation[]                  invitedSubscribers;

328


         @_backLink(
"forum"
)

329


         @_cloneOf(
"pending"
)

330


      @c 
public
 PendingSubscription[]         pendingSubscribers; 
//* permission to subscribe requests

331



         @_backLink(
"forum"
)

332


         @_displayInline

333


      @c 
public
 Comment[]                     comments;

334


      @c 
public
 Comment                       lastComment;

335


         @_backLink(
"forResource"
)

336


         @_displayInline

337


      @c 
public
 ChatHistoryFile[]             chatHistory;

338


         @_dateFormat(
"~MMM-dd, yyyy HH:mm"
)

339


         @_readOnly

340


         @_icon(
"icons/classes/Comment.gif"
)

341



public
 ComplexDate                   lastCommentTime = formula(
"lastComment.submitTime"
);

342


         @_backLink(
"associatedWith"
)

343


      @c 
public
 Message[]                     myUnreadMessages;

344


         @_backLink(
"associatedWith"
)

345


      @c 
public
 Message[]                     myFlaggedMessages;

346


  }

347



348



/**

349


 * Resume. Can be submitted online or by email.

350


 */

351


  @DavClass._nmbGroupColsInEditMode(
2
)

352


  @DavClass._validUser

353


  @DavClass._largeIcon(
"icons/classes/Resume-large.gif"
)

354


  @DavClass._viewCols(
"title, dateSubmitted, firstName, lastName, region, city, desiredSalary, views, myUnreadMessages, myFlaggedMessages, alreadyViewedByMe"
)

355


  @DavClass._editCols(
"title, firstName, lastName, desiredSalary, region, city, positionType, companyType"
)

356


  @DavClass._icon(
"icons/classes/Resume.gif"
)

357



public

static

class
 Resume 
implements
 CollaborationPoint, FileSystem, PersonIdentifier, Address1, Trackable {

358


         @_label(
"Standard information"
)

359


         @_propertyGroupList(
"resumeId, title"
)

360


         @_abstract

361


         @_propertyGroup(
"true"
)

362



public
 Boolean                       group0;

363


         @_autoincrement

364


         @_readOnly

365


         @_notSearchable

366


      @k 
public
 Integer                       resumeId; 
// todo - do we need it?

367



         @_displayNameElm

368


         @_displaySize(
35
)

369


         @_cloneOf(
"subject"
)

370


      @c 
public
 String                        title; 
//* title of this resume

371



         @_label(
"Contact information"
)

372


         @_propertyGroupList(
"suffix, firstName, middleName, lastName, personalTitle, sex, address1, city, region, postalCode, country, radius, distance"
)

373


         @_abstract

374


         @_propertyGroup(
"true"
)

375



public
 Boolean                       group1;

376


      @c 
public
 String                        firstName = writeJS(
"confidential(firstName,     'firstName')"
);

377


      @c 
public
 String                        lastName = writeJS(
"confidential(lastName,      'lastName')"
);

378


         @_notSearchable

379


      @c 
public
 String                        middleName = writeJS(
"confidential(middleName,    'middleName')"
);

380


         @_notSearchable

381


      @c 
public
 Title                         personalTitle = writeJS(
"confidential(personalTitle, 'personalTitle')"
);

382


         @_notSearchable

383


      @c 
public
 String                        suffix = writeJS(
"confidential(suffix,        'suffix')"
);

384


         @_notSearchable

385


      @c 
public
 Sex                           sex = writeJS(
"confidential(sex,           'sex')"
);

386


         @_cloneOf(
"country1"
)

387


      @c 
public
 Country                       country = writeJS(
"confidential(country,       'country')"
);

388


         @_label(
"State"
)

389


         @_cloneOf(
"region1"
)

390


      @c 
public
 String                        region = writeJS(
"confidential(region,        'region')"
);

391


         @_cloneOf(
"city1"
)

392


      @c 
public
 String                        city = writeJS(
"confidential(city,          'city')"
); 
//* city, town, village, township

393



         @_cloneOf(
"postalCode1"
)

394


      @c 
public
 String                        postalCode = writeJS(
"confidential(postalCode,    'postalCode')"
);

395


      @c 
public
 km                            radius; 
//* ex. within 10 miles from certain zip code

396



      @c 
public
 km                            distance; 
//* distance of this location from the specified zip code

397



         @_cloneOf(
"address11"
)

398


      @c 
public
 String                        address1 = writeJS(
"confidential(address1,      'address1')"
); 
//* street address, building number, PO Box, etc.

399



         @_label(
"Experience"
)

400


         @_propertyGroupList(
"priorEmployment"
)

401


         @_abstract

402


         @_propertyGroup(
"true"
)

403



public
 Boolean                       group2;

404


         @_backLink(
"resume"
)

405


         @_displayInline

406



public
 Employment[]                  priorEmployment; 
//* work performed in the past (may inclide different jobs at the same place)

407



         @_label(
"Education"
)

408


         @_propertyGroupList(
"education"
)

409


         @_abstract

410


         @_propertyGroup(
"true"
)

411



public
 Boolean                       group3;

412


         @_backLink(
"resume"
)

413


         @_displayInline

414



public
 Education[]                   education;

415


         @_label(
"Skills"
)

416


         @_propertyGroupList(
"skills, all_skills, formattedResume, attachments"
)

417


         @_abstract

418


         @_propertyGroup(
"true"
)

419



public
 Boolean                       group4;

420


         @_maxDisplayInplace(
5
)

421


         @_backLink(
"resume"
)

422


         @_displayInline

423



public
 Skill[]                       skills; 
//* detailed skill level

424



         @_maxSize(
60000
)

425


         @_avoidDisplaying

426



public
 longString                    all_skills; 
// accumulated tokens from skills - for searching purposes

427



         @_notSearchable

428



public
 SharedFile                    formattedResume; 
//* resume file in .html, .doc, .pdf or other format

429



         @_backLink(
"forResource"
)

430


      @c 
public
 SharedFile[]                  attachments; 
//* other documents (awards, prior work samples, etc.) that may help qualifying the candidate

431



         @_label(
"Summary"
)

432


         @_propertyGroupList(
"hoursOrShifts, salaryType, desiredSalary, description, authorizedToWorkInUS, haveSecurityClearing, positionType, companyType, status, partTime, willingToRelocate, confidentialityLevel"
)

433


         @_abstract

434


         @_propertyGroup(
"true"
)

435



public
 Boolean                       group5;

436


         @_icon(
"icons/dayNight.gif"
)

437



public
 HoursOrShifts                 hoursOrShifts;

438


         @_onCreate

439



public
 SalaryType                    salaryType = writeJS(
"'annual salary'"
);

440


         @_icon(
"icons/classes/Money.gif"
)

441



public
 Money                         desiredSalary;

442


         @_notSearchable

443


      @c 
public
 String                        description; 
//* copy and paste your resume here

444




public
 Boolean                       authorizedToWorkInUS;

445



public
 Boolean                       haveSecurityClearing; 
//* yes, if you have a security clearing

446




public
 PositionType                  positionType;

447



public
 CompanyType                   companyType;

448



public
 ApplicantStatus               status;

449



public
 Boolean                       partTime; 
//* seeking part time employment

450




public
 Boolean                       willingToRelocate; 
//* will consider moving to another place

451



         @_icon(
"icons/lock.gif"
)

452


         @_allowRoles(
"self, admin"
)

453


         @_onCreate

454



public
 ConfidentialityLevel          confidentialityLevel = writeJS(
"'No restrictions'"
); 
//* specifies how much information on this resume is shown to employers

455



         @_label(
"Personal information"
)

456


         @_propertyGroupList(
"person, myUnreadMessages, myFlaggedMessages, views, myView, alreadyViewedByMe, dateSubmitted, url"
)

457


         @_abstract

458


         @_propertyGroup(
"true"
)

459



public
 Boolean                       group6;

460


         @_containerMember

461


         @_notSearchable

462


         @_allowRoles(
"self, admin"
)

463


         @_cloneOf(
"submittedBy"
)

464


      @c 
public
 Contact                       person;

465


         @_backLink(
"associatedWith"
)

466


      @c 
public
 Message[]                     myUnreadMessages;

467


         @_backLink(
"associatedWith"
)

468


      @c 
public
 Message[]                     myFlaggedMessages;

469


         @_backLink(
"forResource"
)

470


         @_cloneOf(
"readHistory"
)

471


      @c 
public
 TrackedRead[]                 views; 
//* tracking who viewed this resume

472



         @_backLink(
"forResource"
)

473


         @_cloneOf(
"myLastRead"
)

474


      @c 
public
 TrackedRead[]                 myView; 
//* did I see this Resume already?

475



      @c 
public
 Integer                       alreadyViewedByMe; 
//* marked if I opened to view this resource at least once

476



         @_sortAscending(
false
)

477


      @c 
public
 ComplexDate                   dateSubmitted; 
//* when this message entered the system

478



         @_cloneOf(
"attachmentsUrl"
)

479


      @c 
public
 String                        url;

480


  }

481



482



public

static
 enum HoursOrShifts {

483


    @_label(
"1st"
) _1st, @_label(
"2nd"
) _2nd, @_label(
"3rd"
) _3rd, Rotating, Weekends, Holidays, Overtime, @_label(
"After School"
) AfterSchool;

484


  }

485



486


  @DavClass._validUser

487


  @DavClass._largeIcon(
"icons/classes/CoverLetter-large.gif"
)

488


  @DavClass._icon(
"icons/classes/CoverLetter.gif"
)

489



public

static

class
 CoverLetter {

490


         @_containerMember

491


      @k 
public
 Contact                       person;

492


         @_displayNameElm

493


      @k 
public
 String                        title;

494


         @_maxSize(
60000
)

495


         @_displayInline

496



public
 longString                    description;

497


  }

498



499



public

static
 enum ConfidentialityLevel {

500


    @_label(
"No restrictions"
) NoRestrictions, @_label(
"Withhold my contact information"
) WithholdMyContactInformation, @_label(
"Reveal only when I apply for a Job"
) RevealOnlyWhenIApplyForAJob;

501


  }

502



503



public

static
 enum JobStatus {

504


    Open, Expired, Cancelled;

505


  }

506



507



public

static
 enum ApplicantStatus {

508


    @_label(
"Actively looking for a Job"
) ActivelyLookingForAJob, @_label(
"Will take the right opportunity"
) WillTakeTheRightOpportunity;

509


  }

510



511


  @DavClass._validUser

512


  @DavClass._largeIcon(
"icons/classes/Employment-large.gif"
)

513


  @DavClass._icon(
"icons/classes/Employment.gif"
)

514



public

static

class
 Employment {

515


      @k 
public
 Resume                        resume;

516


         @_avoidDisplaying

517


      @k 
public
 Integer                       seq;

518



public
 String                        employer;

519


         @_displayNameElm

520



public
 String                        jobTitle; 
//* title at this position

521




public
 String                        location; 
//* country, state/province

522



         @_displayNameElm

523


         @_sortAscending(
false
)

524



public
 String                        datesEmployed; 
//* e.g. 2000-2005

525



         @_maxSize(
4000
)

526



public
 String                        description; 
//* details on work performed, skills applied and achievements

527



  }

528



529



/**

530


 * Scheduled Interview for a Job applicant.

531


 * Applicant will be informed and will be asked to confirm the interview date and time.

532


 */

533


  @DavClass._largeIcon(
"icons/classes/Meeting-large.gif"
)

534


  @DavClass._icon(
"icons/classes/Meeting.gif"
)

535



public

static

class
 Interview 
extends

hudsonfog.voc.model.portal.Meeting
 {

536


         @_subPropertyOf(
"forum"
)

537


    @k@s 
public
 JobApplication                application;

538


    @k@s 
public
 Integer                       seq;

539


  }

540



541



/**

542


 * Job Fair is organized by a recruiting agency to invite candidates for its open Jobs

543


 */

544


  @DavClass._largeIcon(
"icons/classes/JobFair-large.gif"
)

545


  @DavClass._icon(
"icons/classes/JobFair.gif"
)

546


  @DavClass._skipAccessControl

547



public

static

class
 JobFair 
extends

hudsonfog.voc.model.top.Demand

implements
 ScheduledItem {

548


      @k 
public
 Employer                      organizer = writeJS(
"organizer ? organizer : submittedBy.organization"
);

549


    @k@s 
public
 ComplexDate                   dateSubmitted;

550


         @_subPropertyOf(
"synopsis"
)

551


      @s 
public
 String                        title;

552


         @_subPropertyOf(
"submittedBy"
)

553


      @s 
public
 Contact                       contactPerson;

554


         @_dateFormat(
"~MMM-dd, yyyy HH:mm"
)

555


         @_sortAscending(
false
)

556


      @c 
public
 ComplexDate                   start; 
//* start date

557



         @_dateFormat(
"~MMM-dd, yyyy HH:mm"
)

558


         @_cloneOf(
"end"
)

559


      @c 
public
 ComplexDate                   finish; 
//* finish

560



         @_backLink(
"jobFair"
)

561



public
 ParticipatingEmployer[]       employers;

562


  }

563



564


  @DavClass._skipAccessControl

565



public

static

class
 ParticipatingEmployer {

566


      @k 
public
 JobFair                       jobFair;

567


      @k 
public
 Employer                      employer;

568


  }

569



570



/**

571


 * Open house is organized by an employer to invite candidates for its open Jobs

572


 */

573


  @DavClass._largeIcon(
"icons/classes/jobs-OpenHouse-large.gif"
)

574


  @DavClass._skipAccessControl

575


  @DavClass._icon(
"icons/classes/jobs-OpenHouse.gif"
)

576



public

static

class
 OpenHouse 
extends

hudsonfog.voc.model.top.Demand

implements
 ScheduledItem {

577


      @k 
public
 Employer                      employer = writeJS(
"employer ? employer : submittedBy.organization"
);

578


    @k@s 
public
 ComplexDate                   dateSubmitted;

579


         @_subPropertyOf(
"synopsis"
)

580


      @s 
public
 String                        title;

581


         @_subPropertyOf(
"submittedBy"
)

582


      @s 
public
 Contact                       contactPerson;

583


         @_dateFormat(
"~MMM-dd, yyyy HH:mm"
)

584


         @_sortAscending(
false
)

585


      @c 
public
 ComplexDate                   start; 
//* start date

586



         @_dateFormat(
"~MMM-dd, yyyy HH:mm"
)

587


         @_cloneOf(
"end"
)

588


      @c 
public
 ComplexDate                   finish; 
//* finish

589



  }

590



591


  @DavClass._viewCols(
"longName, featuredEmployer, region, city, openJobs, openHouses, jobFairs"
)

592


  @DavClass._skipAccessControl

593



public

static

class
 Employer 
extends

hudsonfog.voc.model.company.Company
 {

594


         @_subPropertyOf(
"name"
)

595


    @k@s 
public
 String                        website;

596


         @_displayNameElm

597


      @s 
public
 String                        longName;

598


         @_backLink(
"company"
)

599



public
 Job[]                         openJobs;

600


         @_readOnly

601


         @_icon(
"icons/featured.gif"
)

602


         @_colorCoding(
"'True' icons/featured.gif; 'False' icons/blank.gif"
)

603



public
 Boolean                       featuredEmployer; 
//* this employer is a sponsor of the site

604



         @_backLink(
"party"
)

605


    @h@s 
public
 PartyAddress[]                addresses;

606



public
 CompanyType                   companyType; 
//* direct or third-party employer (staffing firm)

607



         @_backLink(
"employer"
)

608



public
 OpenHouse[]                   openHouses;

609


         @_backLink(
"employer"
)

610



public
 ParticipatingEmployer[]       jobFairs;

611



public
 Image                         logo;

612


  }

613



614



public

static
 enum ApplicationStatus {

615


    Submitted, Received, Denied, @_label(
"Interview Scheduled"
) InterviewScheduled, @_label(
"Job Offered"
) JobOffered;

616


  }

617



618



public

static
 enum Industry {

619


    @_label(
"Accounting/Finance"
) Accounting_Finance, @_label(
"Arts/Entertainment/Publishing"
) Arts_Entertainment_Publishing, @_label(
"Banking/Mortgage"
) Banking_Mortgage, @_label(
"Clerical/Administrative"
) Clerical_Administrative, College, @_label(
"Construction/Facilities"
) Construction_Facilities, @_label(
"Customer Service"
) CustomerService, @_label(
"Education/Training"
) Education_Training, @_label(
"Engineering/Architecture"
) Engineering_Architecture, @_label(
"Government/Military"
) Government_Military, Healthcare, @_label(
"Hospitality/Travel"
) Hospitality_Travel, @_label(
"Human Resources"
) HumanResources, Insurance, @_label(
"Internet/New Media"
) Internet_NewMedia, Technology, @_label(
"Law Enforcement/Security"
) LawEnforcement_Security, Legal, @_label(
"Management Consulting"
) ManagementConsulting, @_label(
"Manufacturing/Operations"
) Manufacturing_Operations, Marketing, @_label(
"Non-Profit/Volunteer"
) Non_Profit_Volunteer, @_label(
"Pharmaceutical/Biotech"
) Pharmaceutical_Biotech, @_label(
"Real Estate"
) RealEstate, @_label(
"Restaurant/Food Service"
) Restaurant_FoodService, Retail, Sales, Telecommunications, @_label(
"Transportation/Logistics"
) Transportation_Logistics, Advertising;

620


  }

621


}

622